<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span id="local-6989586621680871734"><span id="local-6989586621680871735"><span id="local-6989586621680871736"><span id="local-6989586621680871737"><span id="local-6989586621680871738"><span id="local-6989586621680871739"><span id="local-6989586621680871740"><span id="local-6989586621680871741"><span id="local-6989586621680871742"><span id="local-6989586621680871743"><span id="local-6989586621680871744"><span id="local-6989586621680871745"><span id="local-6989586621680871746"><span id="local-6989586621680871747"></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hs-comment">-- (c) The University of Glasgow 2006</span><span>
</span><span id="line-2"></span><span>
</span><span id="line-3"></span><span class="hs-pragma">{-# LANGUAGE CPP, DeriveDataTypeable #-}</span><span>
</span><span id="line-4"></span><span class="hs-pragma">{-# LANGUAGE LambdaCase #-}</span><span>
</span><span id="line-5"></span><span>
</span><span id="line-6"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Tc.Types.Evidence</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-7"></span><span>
</span><span id="line-8"></span><span>  </span><span class="annot"><span class="hs-comment">-- * HsWrapper</span></span><span>
</span><span id="line-9"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier">HsWrapper</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-10"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator">(&lt;.&gt;)</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpTyApps"><span class="hs-identifier">mkWpTyApps</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpEvApps"><span class="hs-identifier">mkWpEvApps</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpEvVarApps"><span class="hs-identifier">mkWpEvVarApps</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpTyLams"><span class="hs-identifier">mkWpTyLams</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-11"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpLams"><span class="hs-identifier">mkWpLams</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpLet"><span class="hs-identifier">mkWpLet</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpCastN"><span class="hs-identifier">mkWpCastN</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpCastR"><span class="hs-identifier">mkWpCastR</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#collectHsWrapBinders"><span class="hs-identifier">collectHsWrapBinders</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-12"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier">mkWpFun</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#idHsWrapper"><span class="hs-identifier">idHsWrapper</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isIdHsWrapper"><span class="hs-identifier">isIdHsWrapper</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-13"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#pprHsWrapper"><span class="hs-identifier">pprHsWrapper</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#hsWrapDictBinders"><span class="hs-identifier">hsWrapDictBinders</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-14"></span><span>
</span><span id="line-15"></span><span>  </span><span class="annot"><span class="hs-comment">-- * Evidence bindings</span></span><span>
</span><span id="line-16"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier">TcEvBinds</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier">EvBindsVar</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-17"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier">EvBindMap</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#emptyEvBindMap"><span class="hs-identifier">emptyEvBindMap</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#extendEvBinds"><span class="hs-identifier">extendEvBinds</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-18"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#lookupEvBind"><span class="hs-identifier">lookupEvBind</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindMapBinds"><span class="hs-identifier">evBindMapBinds</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-19"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#foldEvBindMap"><span class="hs-identifier">foldEvBindMap</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#nonDetStrictFoldEvBindMap"><span class="hs-identifier">nonDetStrictFoldEvBindMap</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-20"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#filterEvBindMap"><span class="hs-identifier">filterEvBindMap</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-21"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isEmptyEvBindMap"><span class="hs-identifier">isEmptyEvBindMap</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-22"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindMapToVarSet"><span class="hs-identifier">evBindMapToVarSet</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-23"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#varSetMinusEvBindMap"><span class="hs-identifier">varSetMinusEvBindMap</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-24"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier">EvBind</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#emptyTcEvBinds"><span class="hs-identifier">emptyTcEvBinds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isEmptyTcEvBinds"><span class="hs-identifier">isEmptyTcEvBinds</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkGivenEvBind"><span class="hs-identifier">mkGivenEvBind</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWantedEvBind"><span class="hs-identifier">mkWantedEvBind</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-25"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindVar"><span class="hs-identifier">evBindVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isCoEvBindsVar"><span class="hs-identifier">isCoEvBindsVar</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-26"></span><span>
</span><span id="line-27"></span><span>  </span><span class="annot"><span class="hs-comment">-- * EvTerm (already a CoreExpr)</span></span><span>
</span><span id="line-28"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier">EvTerm</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier">EvExpr</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-29"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evId"><span class="hs-identifier">evId</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evCoercion"><span class="hs-identifier">evCoercion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evCast"><span class="hs-identifier">evCast</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evDFunApp"><span class="hs-identifier">evDFunApp</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evDataConApp"><span class="hs-identifier">evDataConApp</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evSelector"><span class="hs-identifier">evSelector</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-30"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkEvCast"><span class="hs-identifier">mkEvCast</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier">evVarsOfTerm</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkEvScSelectors"><span class="hs-identifier">mkEvScSelectors</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTypeable"><span class="hs-identifier">evTypeable</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#findNeededEvVars"><span class="hs-identifier">findNeededEvVars</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-31"></span><span>
</span><span id="line-32"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTermCoercion"><span class="hs-identifier">evTermCoercion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTermCoercion_maybe"><span class="hs-identifier">evTermCoercion_maybe</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-33"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCallStack"><span class="hs-identifier">EvCallStack</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-34"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier">EvTypeable</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-35"></span><span>
</span><span id="line-36"></span><span>  </span><span class="annot"><span class="hs-comment">-- * TcCoercion</span></span><span>
</span><span id="line-37"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier">TcCoercion</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier">TcCoercionR</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier">TcCoercionN</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionP"><span class="hs-identifier">TcCoercionP</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionHole"><span class="hs-identifier">CoercionHole</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-38"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcMCoercion"><span class="hs-identifier">TcMCoercion</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-39"></span><span>  </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier">Role</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Basic.html#LeftOrRight"><span class="hs-identifier">LeftOrRight</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Types.Basic.html#pickLR"><span class="hs-identifier">pickLR</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-40"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcReflCo"><span class="hs-identifier">mkTcReflCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcNomReflCo"><span class="hs-identifier">mkTcNomReflCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcRepReflCo"><span class="hs-identifier">mkTcRepReflCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-41"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcTyConAppCo"><span class="hs-identifier">mkTcTyConAppCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAppCo"><span class="hs-identifier">mkTcAppCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier">mkTcFunCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-42"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAxInstCo"><span class="hs-identifier">mkTcAxInstCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcUnbranchedAxInstCo"><span class="hs-identifier">mkTcUnbranchedAxInstCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCo"><span class="hs-identifier">mkTcForAllCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCos"><span class="hs-identifier">mkTcForAllCos</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-43"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcSymCo"><span class="hs-identifier">mkTcSymCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcTransCo"><span class="hs-identifier">mkTcTransCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcNthCo"><span class="hs-identifier">mkTcNthCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcLRCo"><span class="hs-identifier">mkTcLRCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcSubCo"><span class="hs-identifier">mkTcSubCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#maybeTcSubCo"><span class="hs-identifier">maybeTcSubCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-44"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcDowngradeRole"><span class="hs-identifier">tcDowngradeRole</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-45"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAxiomRuleCo"><span class="hs-identifier">mkTcAxiomRuleCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcGReflRightCo"><span class="hs-identifier">mkTcGReflRightCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcGReflLeftCo"><span class="hs-identifier">mkTcGReflLeftCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcPhantomCo"><span class="hs-identifier">mkTcPhantomCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-46"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceLeftCo"><span class="hs-identifier">mkTcCoherenceLeftCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-47"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceRightCo"><span class="hs-identifier">mkTcCoherenceRightCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-48"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcKindCo"><span class="hs-identifier">mkTcKindCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-49"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcCoercionKind"><span class="hs-identifier">tcCoercionKind</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-50"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoVarCo"><span class="hs-identifier">mkTcCoVarCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-51"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcFamilyTyConAppCo"><span class="hs-identifier">mkTcFamilyTyConAppCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-52"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier">isTcReflCo</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isTcReflexiveCo"><span class="hs-identifier">isTcReflexiveCo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-53"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcCoercionRole"><span class="hs-identifier">tcCoercionRole</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-54"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#unwrapIP"><span class="hs-identifier">unwrapIP</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wrapIP"><span class="hs-identifier">wrapIP</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-55"></span><span>
</span><span id="line-56"></span><span>  </span><span class="annot"><span class="hs-comment">-- * QuoteWrapper</span></span><span>
</span><span id="line-57"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier">QuoteWrapper</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#applyQuoteWrapper"><span class="hs-identifier">applyQuoteWrapper</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#quoteWrapperTyVarTy"><span class="hs-identifier">quoteWrapperTyVarTy</span></a></span><span>
</span><span id="line-58"></span><span>  </span><span class="hs-special">)</span><span> </span><span class="hs-keyword">where</span><span class="hs-cpp">
#include &quot;HsVersions.h&quot;
</span><span>
</span><span id="line-61"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-62"></span><span>
</span><span id="line-63"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.DFM.html"><span class="hs-identifier">GHC.Types.Unique.DFM</span></a></span><span>
</span><span id="line-64"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.FM.html"><span class="hs-identifier">GHC.Types.Unique.FM</span></a></span><span>
</span><span id="line-65"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Var.html"><span class="hs-identifier">GHC.Types.Var</span></a></span><span>
</span><span id="line-66"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html"><span class="hs-identifier">GHC.Core.Coercion.Axiom</span></a></span><span>
</span><span id="line-67"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.html"><span class="hs-identifier">GHC.Core.Coercion</span></a></span><span>
</span><span id="line-68"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Ppr.html"><span class="hs-identifier">GHC.Core.Ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span>   </span><span class="hs-comment">-- Instance OutputableBndr TyVar</span><span>
</span><span id="line-69"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html"><span class="hs-identifier">GHC.Tc.Utils.TcType</span></a></span><span>
</span><span id="line-70"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Type.html"><span class="hs-identifier">GHC.Core.Type</span></a></span><span>
</span><span id="line-71"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.TyCon.html"><span class="hs-identifier">GHC.Core.TyCon</span></a></span><span>
</span><span id="line-72"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.DataCon.html"><span class="hs-identifier">GHC.Core.DataCon</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.DataCon.html#DataCon"><span class="hs-identifier">DataCon</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Core.DataCon.html#dataConWrapId"><span class="hs-identifier">dataConWrapId</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-73"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Class.html"><span class="hs-identifier">GHC.Core.Class</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.Class.html#Class"><span class="hs-identifier">Class</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-74"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Builtin.Names.html"><span class="hs-identifier">GHC.Builtin.Names</span></a></span><span>
</span><span id="line-75"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Var.Env.html"><span class="hs-identifier">GHC.Types.Var.Env</span></a></span><span>
</span><span id="line-76"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html"><span class="hs-identifier">GHC.Types.Var.Set</span></a></span><span>
</span><span id="line-77"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Predicate.html"><span class="hs-identifier">GHC.Core.Predicate</span></a></span><span>
</span><span id="line-78"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Name.html"><span class="hs-identifier">GHC.Types.Name</span></a></span><span>
</span><span id="line-79"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.Pair.html"><span class="hs-identifier">GHC.Data.Pair</span></a></span><span>
</span><span id="line-80"></span><span>
</span><span id="line-81"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.html"><span class="hs-identifier">GHC.Core</span></a></span><span>
</span><span id="line-82"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Class.html"><span class="hs-identifier">GHC.Core.Class</span></a></span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.Class.html#classSCSelId"><span class="hs-identifier">classSCSelId</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-83"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.FVs.html"><span class="hs-identifier">GHC.Core.FVs</span></a></span><span>   </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Core.FVs.html#exprSomeFreeVars"><span class="hs-identifier">exprSomeFreeVars</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-84"></span><span>
</span><span id="line-85"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Misc.html"><span class="hs-identifier">GHC.Utils.Misc</span></a></span><span>
</span><span id="line-86"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.Bag.html"><span class="hs-identifier">GHC.Data.Bag</span></a></span><span>
</span><span id="line-87"></span><span class="hs-keyword">import</span><span> </span><span class="hs-keyword">qualified</span><span> </span><span class="annot"><a href="../../base/src/Data.Data.html#"><span class="hs-identifier">Data.Data</span></a></span><span> </span><span class="hs-keyword">as</span><span> </span><span class="annot"><span class="hs-identifier">Data</span></span><span>
</span><span id="line-88"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-89"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.SrcLoc.html"><span class="hs-identifier">GHC.Types.SrcLoc</span></a></span><span>
</span><span id="line-90"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Data.IORef.html#"><span class="hs-identifier">Data.IORef</span></a></span><span class="hs-special">(</span><span> </span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier">IORef</span></a></span><span> </span><span class="hs-special">)</span><span>
</span><span id="line-91"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Set.html"><span class="hs-identifier">GHC.Types.Unique.Set</span></a></span><span>
</span><span id="line-92"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Core.Multiplicity.html"><span class="hs-identifier">GHC.Core.Multiplicity</span></a></span><span>
</span><span id="line-93"></span><span>
</span><span id="line-94"></span><span class="hs-comment">{-
Note [TcCoercions]
~~~~~~~~~~~~~~~~~~
| TcCoercions are a hack used by the typechecker. Normally,
Coercions have free variables of type (a ~# b): we call these
CoVars. However, the type checker passes around equality evidence
(boxed up) at type (a ~ b).

An TcCoercion is simply a Coercion whose free variables have may be either
boxed or unboxed. After we are done with typechecking the desugarer finds the
boxed free variables, unboxes them, and creates a resulting real Coercion with
kosher free variables.

-}</span><span>
</span><span id="line-108"></span><span>
</span><span id="line-109"></span><span class="hs-keyword">type</span><span> </span><span id="TcCoercion"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-var">TcCoercion</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Coercion"><span class="hs-identifier hs-type">Coercion</span></a></span><span>
</span><span id="line-110"></span><span class="hs-keyword">type</span><span> </span><span id="TcCoercionN"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-var">TcCoercionN</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionN"><span class="hs-identifier hs-type">CoercionN</span></a></span><span>    </span><span class="hs-comment">-- A Nominal          coercion ~N</span><span>
</span><span id="line-111"></span><span class="hs-keyword">type</span><span> </span><span id="TcCoercionR"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-var">TcCoercionR</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionR"><span class="hs-identifier hs-type">CoercionR</span></a></span><span>    </span><span class="hs-comment">-- A Representational coercion ~R</span><span>
</span><span id="line-112"></span><span class="hs-keyword">type</span><span> </span><span id="TcCoercionP"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionP"><span class="hs-identifier hs-var">TcCoercionP</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionP"><span class="hs-identifier hs-type">CoercionP</span></a></span><span>    </span><span class="hs-comment">-- a phantom coercion</span><span>
</span><span id="line-113"></span><span class="hs-keyword">type</span><span> </span><span id="TcMCoercion"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcMCoercion"><span class="hs-identifier hs-var">TcMCoercion</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#MCoercion"><span class="hs-identifier hs-type">MCoercion</span></a></span><span>
</span><span id="line-114"></span><span>
</span><span id="line-115"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcReflCo"><span class="hs-identifier hs-type">mkTcReflCo</span></a></span><span>             </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-116"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcSymCo"><span class="hs-identifier hs-type">mkTcSymCo</span></a></span><span>              </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-117"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcTransCo"><span class="hs-identifier hs-type">mkTcTransCo</span></a></span><span>            </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-118"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcNomReflCo"><span class="hs-identifier hs-type">mkTcNomReflCo</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span>
</span><span id="line-119"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcRepReflCo"><span class="hs-identifier hs-type">mkTcRepReflCo</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span>
</span><span id="line-120"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcTyConAppCo"><span class="hs-identifier hs-type">mkTcTyConAppCo</span></a></span><span>         </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCon.html#TyCon"><span class="hs-identifier hs-type">TyCon</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-121"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAppCo"><span class="hs-identifier hs-type">mkTcAppCo</span></a></span><span>              </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-122"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier hs-type">mkTcFunCo</span></a></span><span>              </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-123"></span><span id="local-6989586621680872027"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAxInstCo"><span class="hs-identifier hs-type">mkTcAxInstCo</span></a></span><span>           </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#CoAxiom"><span class="hs-identifier hs-type">CoAxiom</span></a></span><span> </span><span class="annot"><a href="#local-6989586621680872027"><span class="hs-identifier hs-type">br</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#BranchIndex"><span class="hs-identifier hs-type">BranchIndex</span></a></span><span>
</span><span id="line-124"></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span></span><span>
</span><span id="line-125"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcUnbranchedAxInstCo"><span class="hs-identifier hs-type">mkTcUnbranchedAxInstCo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#CoAxiom"><span class="hs-identifier hs-type">CoAxiom</span></a></span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Unbranched"><span class="hs-identifier hs-type">Unbranched</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-126"></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span>
</span><span id="line-127"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCo"><span class="hs-identifier hs-type">mkTcForAllCo</span></a></span><span>           </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-128"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCos"><span class="hs-identifier hs-type">mkTcForAllCos</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-129"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcNthCo"><span class="hs-identifier hs-type">mkTcNthCo</span></a></span><span>              </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-130"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcLRCo"><span class="hs-identifier hs-type">mkTcLRCo</span></a></span><span>               </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Basic.html#LeftOrRight"><span class="hs-identifier hs-type">LeftOrRight</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-131"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcSubCo"><span class="hs-identifier hs-type">mkTcSubCo</span></a></span><span>              </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span>
</span><span id="line-132"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcDowngradeRole"><span class="hs-identifier hs-type">tcDowngradeRole</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-133"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcAxiomRuleCo"><span class="hs-identifier hs-type">mkTcAxiomRuleCo</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#CoAxiomRule"><span class="hs-identifier hs-type">CoAxiomRule</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span>
</span><span id="line-134"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcGReflRightCo"><span class="hs-identifier hs-type">mkTcGReflRightCo</span></a></span><span>       </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-135"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcGReflLeftCo"><span class="hs-identifier hs-type">mkTcGReflLeftCo</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-136"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceLeftCo"><span class="hs-identifier hs-type">mkTcCoherenceLeftCo</span></a></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span>
</span><span id="line-137"></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-138"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceRightCo"><span class="hs-identifier hs-type">mkTcCoherenceRightCo</span></a></span><span>   </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span>
</span><span id="line-139"></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-140"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcPhantomCo"><span class="hs-identifier hs-type">mkTcPhantomCo</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionP"><span class="hs-identifier hs-type">TcCoercionP</span></a></span><span>
</span><span id="line-141"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcKindCo"><span class="hs-identifier hs-type">mkTcKindCo</span></a></span><span>             </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span>
</span><span id="line-142"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcCoVarCo"><span class="hs-identifier hs-type">mkTcCoVarCo</span></a></span><span>            </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#CoVar"><span class="hs-identifier hs-type">CoVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-143"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkTcFamilyTyConAppCo"><span class="hs-identifier hs-type">mkTcFamilyTyConAppCo</span></a></span><span>   </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCon.html#TyCon"><span class="hs-identifier hs-type">TyCon</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span>
</span><span id="line-144"></span><span>
</span><span id="line-145"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcCoercionKind"><span class="hs-identifier hs-type">tcCoercionKind</span></a></span><span>         </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.Pair.html#Pair"><span class="hs-identifier hs-type">Pair</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span>
</span><span id="line-146"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#tcCoercionRole"><span class="hs-identifier hs-type">tcCoercionRole</span></a></span><span>         </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.Coercion.Axiom.html#Role"><span class="hs-identifier hs-type">Role</span></a></span><span>
</span><span id="line-147"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier hs-type">isTcReflCo</span></a></span><span>             </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-148"></span><span>
</span><span id="line-149"></span><span class="hs-comment">-- | This version does a slow check, calculating the related types and seeing</span><span>
</span><span id="line-150"></span><span class="hs-comment">-- if they are equal.</span><span>
</span><span id="line-151"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isTcReflexiveCo"><span class="hs-identifier hs-type">isTcReflexiveCo</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-152"></span><span>
</span><span id="line-153"></span><span id="mkTcReflCo"><span class="annot"><span class="annottext">mkTcReflCo :: Role -&gt; Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcReflCo"><span class="hs-identifier hs-var hs-var">mkTcReflCo</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkReflCo"><span class="hs-identifier hs-var">mkReflCo</span></a></span><span>
</span><span id="line-154"></span><span id="mkTcSymCo"><span class="annot"><span class="annottext">mkTcSymCo :: TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSymCo"><span class="hs-identifier hs-var hs-var">mkTcSymCo</span></a></span></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkSymCo"><span class="hs-identifier hs-var">mkSymCo</span></a></span><span>
</span><span id="line-155"></span><span id="mkTcTransCo"><span class="annot"><span class="annottext">mkTcTransCo :: TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcTransCo"><span class="hs-identifier hs-var hs-var">mkTcTransCo</span></a></span></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkTransCo"><span class="hs-identifier hs-var">mkTransCo</span></a></span><span>
</span><span id="line-156"></span><span id="mkTcNomReflCo"><span class="annot"><span class="annottext">mkTcNomReflCo :: Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcNomReflCo"><span class="hs-identifier hs-var hs-var">mkTcNomReflCo</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkNomReflCo"><span class="hs-identifier hs-var">mkNomReflCo</span></a></span><span>
</span><span id="line-157"></span><span id="mkTcRepReflCo"><span class="annot"><span class="annottext">mkTcRepReflCo :: Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcRepReflCo"><span class="hs-identifier hs-var hs-var">mkTcRepReflCo</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkRepReflCo"><span class="hs-identifier hs-var">mkRepReflCo</span></a></span><span>
</span><span id="line-158"></span><span id="mkTcTyConAppCo"><span class="annot"><span class="annottext">mkTcTyConAppCo :: Role -&gt; TyCon -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcTyConAppCo"><span class="hs-identifier hs-var hs-var">mkTcTyConAppCo</span></a></span></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HasDebugCallStack =&gt; Role -&gt; TyCon -&gt; [TcCoercionR] -&gt; TcCoercionR
Role -&gt; TyCon -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkTyConAppCo"><span class="hs-identifier hs-var">mkTyConAppCo</span></a></span><span>
</span><span id="line-159"></span><span id="mkTcAppCo"><span class="annot"><span class="annottext">mkTcAppCo :: TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcAppCo"><span class="hs-identifier hs-var hs-var">mkTcAppCo</span></a></span></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkAppCo"><span class="hs-identifier hs-var">mkAppCo</span></a></span><span>
</span><span id="line-160"></span><span id="mkTcFunCo"><span class="annot"><span class="annottext">mkTcFunCo :: Role -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier hs-var hs-var">mkTcFunCo</span></a></span></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkFunCo"><span class="hs-identifier hs-var">mkFunCo</span></a></span><span>
</span><span id="line-161"></span><span id="mkTcAxInstCo"><span class="annot"><span class="annottext">mkTcAxInstCo :: forall (br :: BranchFlag).
Role -&gt; CoAxiom br -&gt; Int -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcAxInstCo"><span class="hs-identifier hs-var hs-var">mkTcAxInstCo</span></a></span></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; CoAxiom br -&gt; Int -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
forall (br :: BranchFlag).
Role -&gt; CoAxiom br -&gt; Int -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkAxInstCo"><span class="hs-identifier hs-var">mkAxInstCo</span></a></span><span>
</span><span id="line-162"></span><span id="mkTcUnbranchedAxInstCo"><span class="annot"><span class="annottext">mkTcUnbranchedAxInstCo :: CoAxiom Unbranched -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcUnbranchedAxInstCo"><span class="hs-identifier hs-var hs-var">mkTcUnbranchedAxInstCo</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role
-&gt; CoAxiom Unbranched -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkUnbranchedAxInstCo"><span class="hs-identifier hs-var">mkUnbranchedAxInstCo</span></a></span><span> </span><span class="annot"><span class="annottext">Role
</span><a href="GHC.Core.Coercion.Axiom.html#Representational"><span class="hs-identifier hs-var">Representational</span></a></span><span>
</span><span id="line-163"></span><span id="mkTcForAllCo"><span class="annot"><span class="annottext">mkTcForAllCo :: Id -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCo"><span class="hs-identifier hs-var hs-var">mkTcForAllCo</span></a></span></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkForAllCo"><span class="hs-identifier hs-var">mkForAllCo</span></a></span><span>
</span><span id="line-164"></span><span id="mkTcForAllCos"><span class="annot"><span class="annottext">mkTcForAllCos :: [(Id, TcCoercionR)] -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcForAllCos"><span class="hs-identifier hs-var hs-var">mkTcForAllCos</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[(Id, TcCoercionR)] -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkForAllCos"><span class="hs-identifier hs-var">mkForAllCos</span></a></span><span>
</span><span id="line-165"></span><span id="mkTcNthCo"><span class="annot"><span class="annottext">mkTcNthCo :: Role -&gt; Int -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcNthCo"><span class="hs-identifier hs-var hs-var">mkTcNthCo</span></a></span></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HasDebugCallStack =&gt; Role -&gt; Int -&gt; TcCoercionR -&gt; TcCoercionR
Role -&gt; Int -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkNthCo"><span class="hs-identifier hs-var">mkNthCo</span></a></span><span>
</span><span id="line-166"></span><span id="mkTcLRCo"><span class="annot"><span class="annottext">mkTcLRCo :: LeftOrRight -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcLRCo"><span class="hs-identifier hs-var hs-var">mkTcLRCo</span></a></span></span><span>               </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">LeftOrRight -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkLRCo"><span class="hs-identifier hs-var">mkLRCo</span></a></span><span>
</span><span id="line-167"></span><span id="mkTcSubCo"><span class="annot"><span class="annottext">mkTcSubCo :: TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSubCo"><span class="hs-identifier hs-var hs-var">mkTcSubCo</span></a></span></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkSubCo"><span class="hs-identifier hs-var">mkSubCo</span></a></span><span>
</span><span id="line-168"></span><span id="tcDowngradeRole"><span class="annot"><span class="annottext">tcDowngradeRole :: Role -&gt; Role -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#tcDowngradeRole"><span class="hs-identifier hs-var hs-var">tcDowngradeRole</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Role -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#downgradeRole"><span class="hs-identifier hs-var">downgradeRole</span></a></span><span>
</span><span id="line-169"></span><span id="mkTcAxiomRuleCo"><span class="annot"><span class="annottext">mkTcAxiomRuleCo :: CoAxiomRule -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcAxiomRuleCo"><span class="hs-identifier hs-var hs-var">mkTcAxiomRuleCo</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CoAxiomRule -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkAxiomRuleCo"><span class="hs-identifier hs-var">mkAxiomRuleCo</span></a></span><span>
</span><span id="line-170"></span><span id="mkTcGReflRightCo"><span class="annot"><span class="annottext">mkTcGReflRightCo :: Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcGReflRightCo"><span class="hs-identifier hs-var hs-var">mkTcGReflRightCo</span></a></span></span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkGReflRightCo"><span class="hs-identifier hs-var">mkGReflRightCo</span></a></span><span>
</span><span id="line-171"></span><span id="mkTcGReflLeftCo"><span class="annot"><span class="annottext">mkTcGReflLeftCo :: Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcGReflLeftCo"><span class="hs-identifier hs-var hs-var">mkTcGReflLeftCo</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkGReflLeftCo"><span class="hs-identifier hs-var">mkGReflLeftCo</span></a></span><span>
</span><span id="line-172"></span><span id="mkTcCoherenceLeftCo"><span class="annot"><span class="annottext">mkTcCoherenceLeftCo :: Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceLeftCo"><span class="hs-identifier hs-var hs-var">mkTcCoherenceLeftCo</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkCoherenceLeftCo"><span class="hs-identifier hs-var">mkCoherenceLeftCo</span></a></span><span>
</span><span id="line-173"></span><span id="mkTcCoherenceRightCo"><span class="annot"><span class="annottext">mkTcCoherenceRightCo :: Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcCoherenceRightCo"><span class="hs-identifier hs-var hs-var">mkTcCoherenceRightCo</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Role -&gt; Mult -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkCoherenceRightCo"><span class="hs-identifier hs-var">mkCoherenceRightCo</span></a></span><span>
</span><span id="line-174"></span><span id="mkTcPhantomCo"><span class="annot"><span class="annottext">mkTcPhantomCo :: TcCoercionR -&gt; Mult -&gt; Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcPhantomCo"><span class="hs-identifier hs-var hs-var">mkTcPhantomCo</span></a></span></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Mult -&gt; Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkPhantomCo"><span class="hs-identifier hs-var">mkPhantomCo</span></a></span><span>
</span><span id="line-175"></span><span id="mkTcKindCo"><span class="annot"><span class="annottext">mkTcKindCo :: TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcKindCo"><span class="hs-identifier hs-var hs-var">mkTcKindCo</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkKindCo"><span class="hs-identifier hs-var">mkKindCo</span></a></span><span>
</span><span id="line-176"></span><span id="mkTcCoVarCo"><span class="annot"><span class="annottext">mkTcCoVarCo :: Id -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcCoVarCo"><span class="hs-identifier hs-var hs-var">mkTcCoVarCo</span></a></span></span><span>            </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkCoVarCo"><span class="hs-identifier hs-var">mkCoVarCo</span></a></span><span>
</span><span id="line-177"></span><span id="mkTcFamilyTyConAppCo"><span class="annot"><span class="annottext">mkTcFamilyTyConAppCo :: TyCon -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcFamilyTyConAppCo"><span class="hs-identifier hs-var hs-var">mkTcFamilyTyConAppCo</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TyCon -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkFamilyTyConAppCo"><span class="hs-identifier hs-var">mkFamilyTyConAppCo</span></a></span><span>
</span><span id="line-178"></span><span>
</span><span id="line-179"></span><span id="tcCoercionKind"><span class="annot"><span class="annottext">tcCoercionKind :: TcCoercionR -&gt; Pair Mult
</span><a href="GHC.Tc.Types.Evidence.html#tcCoercionKind"><span class="hs-identifier hs-var hs-var">tcCoercionKind</span></a></span></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Pair Mult
</span><a href="GHC.Core.Coercion.html#coercionKind"><span class="hs-identifier hs-var">coercionKind</span></a></span><span>
</span><span id="line-180"></span><span id="tcCoercionRole"><span class="annot"><span class="annottext">tcCoercionRole :: TcCoercionR -&gt; Role
</span><a href="GHC.Tc.Types.Evidence.html#tcCoercionRole"><span class="hs-identifier hs-var hs-var">tcCoercionRole</span></a></span></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Role
</span><a href="GHC.Core.Coercion.html#coercionRole"><span class="hs-identifier hs-var">coercionRole</span></a></span><span>
</span><span id="line-181"></span><span id="isTcReflCo"><span class="annot"><span class="annottext">isTcReflCo :: TcCoercionR -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier hs-var hs-var">isTcReflCo</span></a></span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Core.Coercion.html#isReflCo"><span class="hs-identifier hs-var">isReflCo</span></a></span><span>
</span><span id="line-182"></span><span id="isTcReflexiveCo"><span class="annot"><span class="annottext">isTcReflexiveCo :: TcCoercionR -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isTcReflexiveCo"><span class="hs-identifier hs-var hs-var">isTcReflexiveCo</span></a></span></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Core.Coercion.html#isReflexiveCo"><span class="hs-identifier hs-var">isReflexiveCo</span></a></span><span>
</span><span id="line-183"></span><span>
</span><span id="line-184"></span><span class="hs-comment">-- | If the EqRel is ReprEq, makes a SubCo; otherwise, does nothing.</span><span>
</span><span id="line-185"></span><span class="hs-comment">-- Note that the input coercion should always be nominal.</span><span>
</span><span id="line-186"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#maybeTcSubCo"><span class="hs-identifier hs-type">maybeTcSubCo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Predicate.html#EqRel"><span class="hs-identifier hs-type">EqRel</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-187"></span><span id="maybeTcSubCo"><span class="annot"><span class="annottext">maybeTcSubCo :: EqRel -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#maybeTcSubCo"><span class="hs-identifier hs-var hs-var">maybeTcSubCo</span></a></span></span><span> </span><span class="annot"><span class="annottext">EqRel
</span><a href="GHC.Core.Predicate.html#NomEq"><span class="hs-identifier hs-var">NomEq</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
forall a. a -&gt; a
</span><a href="../../base/src/GHC.Base.html#id"><span class="hs-identifier hs-var">id</span></a></span><span>
</span><span id="line-188"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#maybeTcSubCo"><span class="hs-identifier hs-var">maybeTcSubCo</span></a></span><span> </span><span class="annot"><span class="annottext">EqRel
</span><a href="GHC.Core.Predicate.html#ReprEq"><span class="hs-identifier hs-var">ReprEq</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSubCo"><span class="hs-identifier hs-var">mkTcSubCo</span></a></span><span>
</span><span id="line-189"></span><span>
</span><span id="line-190"></span><span>
</span><span id="line-191"></span><span class="hs-comment">{-
%************************************************************************
%*                                                                      *
                  HsWrapper
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-198"></span><span>
</span><span id="line-199"></span><span class="hs-keyword">data</span><span> </span><span id="HsWrapper"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-var">HsWrapper</span></a></span></span><span>
</span><span id="line-200"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="WpHole"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span></span><span>                      </span><span class="hs-comment">-- The identity coercion</span><span>
</span><span id="line-201"></span><span>
</span><span id="line-202"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpCompose"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-var">WpCompose</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-203"></span><span>       </span><span class="hs-comment">-- (wrap1 `WpCompose` wrap2)[e] = wrap1[ wrap2[ e ]]</span><span>
</span><span id="line-204"></span><span>       </span><span class="hs-comment">--</span><span>
</span><span id="line-205"></span><span>       </span><span class="hs-comment">-- Hence  (\a. []) `WpCompose` (\b. []) = (\a b. [])</span><span>
</span><span id="line-206"></span><span>       </span><span class="hs-comment">-- But    ([] a)   `WpCompose` ([] b)   = ([] b a)</span><span>
</span><span id="line-207"></span><span>
</span><span id="line-208"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpFun"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-var">WpFun</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-209"></span><span>       </span><span class="hs-comment">-- (WpFun wrap1 wrap2 (w, t1))[e] = \(x:_w t1). wrap2[ e wrap1[x] ]</span><span>
</span><span id="line-210"></span><span>       </span><span class="hs-comment">-- So note that if  wrap1 :: exp_arg &lt;= act_arg</span><span>
</span><span id="line-211"></span><span>       </span><span class="hs-comment">--                  wrap2 :: act_res &lt;= exp_res</span><span>
</span><span id="line-212"></span><span>       </span><span class="hs-comment">--           then   WpFun wrap1 wrap2 : (act_arg -&gt; arg_res) &lt;= (exp_arg -&gt; exp_res)</span><span>
</span><span id="line-213"></span><span>       </span><span class="hs-comment">-- This isn't the same as for mkFunCo, but it has to be this way</span><span>
</span><span id="line-214"></span><span>       </span><span class="hs-comment">-- because we can't use 'sym' to flip around these HsWrappers</span><span>
</span><span id="line-215"></span><span>       </span><span class="hs-comment">-- The TcType is the &quot;from&quot; type of the first wrapper</span><span>
</span><span id="line-216"></span><span>       </span><span class="hs-comment">-- The SDoc explains the circumstances under which we have created this</span><span>
</span><span id="line-217"></span><span>       </span><span class="hs-comment">-- WpFun, in case we run afoul of levity polymorphism restrictions in</span><span>
</span><span id="line-218"></span><span>       </span><span class="hs-comment">-- the desugarer. See Note [Levity polymorphism checking] in GHC.HsToCore.Monad</span><span>
</span><span id="line-219"></span><span>
</span><span id="line-220"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpCast"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span>        </span><span class="hs-comment">-- A cast:  [] `cast` co</span><span>
</span><span id="line-221"></span><span>                              </span><span class="hs-comment">-- Guaranteed not the identity coercion</span><span>
</span><span id="line-222"></span><span>                              </span><span class="hs-comment">-- At role Representational</span><span>
</span><span id="line-223"></span><span>
</span><span id="line-224"></span><span>        </span><span class="hs-comment">-- Evidence abstraction and application</span><span>
</span><span id="line-225"></span><span>        </span><span class="hs-comment">-- (both dictionaries and coercions)</span><span>
</span><span id="line-226"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpEvLam"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-var">WpEvLam</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span>               </span><span class="hs-comment">-- \d. []       the 'd' is an evidence variable</span><span>
</span><span id="line-227"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpEvApp"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-var">WpEvApp</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>              </span><span class="hs-comment">-- [] d         the 'd' is evidence for a constraint</span><span>
</span><span id="line-228"></span><span>        </span><span class="hs-comment">-- Kind and Type abstraction and application</span><span>
</span><span id="line-229"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpTyLam"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-var">WpTyLam</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span>       </span><span class="hs-comment">-- \a. []  the 'a' is a type/kind variable (not coercion var)</span><span>
</span><span id="line-230"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpTyApp"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-var">WpTyApp</span></a></span></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#KindOrType"><span class="hs-identifier hs-type">KindOrType</span></a></span><span>  </span><span class="hs-comment">-- [] t    the 't' is a type (not coercion)</span><span>
</span><span id="line-231"></span><span>
</span><span id="line-232"></span><span>
</span><span id="line-233"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpLet"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-var">WpLet</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span>             </span><span class="hs-comment">-- Non-empty (or possibly non-empty) evidence bindings,</span><span>
</span><span id="line-234"></span><span>                                </span><span class="hs-comment">-- so that the identity coercion is always exactly WpHole</span><span>
</span><span id="line-235"></span><span>
</span><span id="line-236"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="WpMultCoercion"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-var">WpMultCoercion</span></a></span></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Coercion"><span class="hs-identifier hs-type">Coercion</span></a></span><span>     </span><span class="hs-comment">-- Require that a Coercion be reflexive; otherwise,</span><span>
</span><span id="line-237"></span><span>                                </span><span class="hs-comment">-- error in the desugarer. See GHC.Tc.Utils.Unify</span><span>
</span><span id="line-238"></span><span>                                </span><span class="hs-comment">-- Note [Wrapper returned from tcSubMult]</span><span>
</span><span id="line-239"></span><span>
</span><span id="line-240"></span><span class="hs-comment">-- Cannot derive Data instance because SDoc is not Data (it stores a function).</span><span>
</span><span id="line-241"></span><span class="hs-comment">-- So we do it manually:</span><span>
</span><span id="line-242"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680871523"><span id="local-6989586621680871525"><span id="local-6989586621680871527"><span id="local-6989586621680871529"><span id="local-6989586621680871531"><span id="local-6989586621680871533"><span id="local-6989586621680871535"><span id="local-6989586621680871537"><span id="local-6989586621680871539"><span id="local-6989586621680871541"><span class="annot"><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-type">Data.Data</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span></span></span></span></span></span></span></span></span></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-243"></span><span>  </span><span id="local-6989586621680871504"><span class="annot"><span class="annottext">gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; HsWrapper -&gt; c HsWrapper
</span><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var hs-var hs-var hs-var">gfoldl</span></a></span></span><span> </span><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680871502"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871502"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; c HsWrapper
forall g. g -&gt; c g
</span><a href="#local-6989586621680871502"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-244"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871501"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871501"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871500"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871500"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-type">WpCompose</span></a></span><span> </span><span id="local-6989586621680871499"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871499"><span class="hs-identifier hs-var">a1</span></a></span></span><span> </span><span id="local-6989586621680871498"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871498"><span class="hs-identifier hs-var">a2</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871500"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-var">WpCompose</span></a></span><span> </span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
-&gt; HsWrapper -&gt; c (HsWrapper -&gt; HsWrapper)
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871501"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871499"><span class="hs-identifier hs-var">a1</span></a></span><span> </span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper) -&gt; HsWrapper -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871501"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871498"><span class="hs-identifier hs-var">a2</span></a></span><span>
</span><span id="line-245"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871497"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871497"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871496"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871496"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-type">WpFun</span></a></span><span> </span><span id="local-6989586621680871495"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871495"><span class="hs-identifier hs-var">a1</span></a></span></span><span> </span><span id="local-6989586621680871494"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871494"><span class="hs-identifier hs-var">a2</span></a></span></span><span> </span><span id="local-6989586621680871493"><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871493"><span class="hs-identifier hs-var">a3</span></a></span></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871496"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#wpFunEmpty"><span class="hs-identifier hs-var">wpFunEmpty</span></a></span><span> </span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; HsWrapper -&gt; c (HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871497"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871495"><span class="hs-identifier hs-var">a1</span></a></span><span> </span><span class="annot"><span class="annottext">c (HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; HsWrapper -&gt; c (Scaled Mult -&gt; HsWrapper)
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871497"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871494"><span class="hs-identifier hs-var">a2</span></a></span><span> </span><span class="annot"><span class="annottext">c (Scaled Mult -&gt; HsWrapper) -&gt; Scaled Mult -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871497"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871493"><span class="hs-identifier hs-var">a3</span></a></span><span>
</span><span id="line-246"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871491"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871491"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871490"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871490"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680871489"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871489"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(TcCoercionR -&gt; HsWrapper) -&gt; c (TcCoercionR -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871490"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="annot"><span class="annottext">c (TcCoercionR -&gt; HsWrapper) -&gt; TcCoercionR -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871491"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871489"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-247"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871488"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871488"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871487"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871487"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-type">WpEvLam</span></a></span><span> </span><span id="local-6989586621680871486"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871486"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; c (Id -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871487"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-var">WpEvLam</span></a></span><span> </span><span class="annot"><span class="annottext">c (Id -&gt; HsWrapper) -&gt; Id -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871488"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871486"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-248"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871485"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871485"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871484"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871484"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-type">WpEvApp</span></a></span><span> </span><span id="local-6989586621680871483"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871483"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvTerm -&gt; HsWrapper) -&gt; c (EvTerm -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871484"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-var">WpEvApp</span></a></span><span> </span><span class="annot"><span class="annottext">c (EvTerm -&gt; HsWrapper) -&gt; EvTerm -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871485"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871483"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-249"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871482"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871482"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871481"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871481"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-type">WpTyLam</span></a></span><span> </span><span id="local-6989586621680871480"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871480"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; c (Id -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871481"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-var">WpTyLam</span></a></span><span> </span><span class="annot"><span class="annottext">c (Id -&gt; HsWrapper) -&gt; Id -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871482"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871480"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-250"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871479"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871479"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871478"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871478"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-type">WpTyApp</span></a></span><span> </span><span id="local-6989586621680871477"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871477"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Mult -&gt; HsWrapper) -&gt; c (Mult -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871478"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-var">WpTyApp</span></a></span><span> </span><span class="annot"><span class="annottext">c (Mult -&gt; HsWrapper) -&gt; Mult -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871479"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871477"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-251"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871476"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871476"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871475"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871475"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-type">WpLet</span></a></span><span> </span><span id="local-6989586621680871474"><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680871474"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(TcEvBinds -&gt; HsWrapper) -&gt; c (TcEvBinds -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871475"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-var">WpLet</span></a></span><span> </span><span class="annot"><span class="annottext">c (TcEvBinds -&gt; HsWrapper) -&gt; TcEvBinds -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871476"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680871474"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-252"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#gfoldl"><span class="hs-identifier hs-var">gfoldl</span></a></span><span> </span><span id="local-6989586621680871473"><span class="annot"><span class="annottext">forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871473"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871472"><span class="annot"><span class="annottext">forall g. g -&gt; c g
</span><a href="#local-6989586621680871472"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-type">WpMultCoercion</span></a></span><span> </span><span id="local-6989586621680871471"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871471"><span class="hs-identifier hs-var">a1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(TcCoercionR -&gt; HsWrapper) -&gt; c (TcCoercionR -&gt; HsWrapper)
forall g. g -&gt; c g
</span><a href="#local-6989586621680871472"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-var">WpMultCoercion</span></a></span><span> </span><span class="annot"><span class="annottext">c (TcCoercionR -&gt; HsWrapper) -&gt; TcCoercionR -&gt; c HsWrapper
forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b
</span><a href="#local-6989586621680871473"><span class="hs-operator hs-var">`k`</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871471"><span class="hs-identifier hs-var">a1</span></a></span><span>
</span><span id="line-253"></span><span>
</span><span id="line-254"></span><span>  </span><span id="local-6989586621680871438"><span class="annot"><span class="annottext">gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c HsWrapper
</span><a href="../../base/src/Data.Data.html#gunfold"><span class="hs-identifier hs-var hs-var hs-var hs-var">gunfold</span></a></span></span><span> </span><span id="local-6989586621680871436"><span class="annot"><span class="annottext">forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871435"><span class="annot"><span class="annottext">forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span id="local-6989586621680871434"><span class="annot"><span class="annottext">Constr
</span><a href="#local-6989586621680871434"><span class="hs-identifier hs-var">c</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Constr -&gt; Int
</span><a href="../../base/src/Data.Data.html#constrIndex"><span class="hs-identifier hs-var">Data.constrIndex</span></a></span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="#local-6989586621680871434"><span class="hs-identifier hs-var">c</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-255"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; c HsWrapper
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-256"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; HsWrapper)
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-var">WpCompose</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-257"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">3</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (Scaled Mult -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">c (HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; c (Scaled Mult -&gt; HsWrapper)
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">c (HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
-&gt; c (HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#wpFunEmpty"><span class="hs-identifier hs-var">wpFunEmpty</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-258"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">4</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (TcCoercionR -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(TcCoercionR -&gt; HsWrapper) -&gt; c (TcCoercionR -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-259"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">5</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (Id -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; c (Id -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-var">WpEvLam</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-260"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">6</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (EvTerm -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(EvTerm -&gt; HsWrapper) -&gt; c (EvTerm -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-var">WpEvApp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-261"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">7</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (Id -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; c (Id -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-var">WpTyLam</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-262"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">8</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (Mult -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Mult -&gt; HsWrapper) -&gt; c (Mult -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-var">WpTyApp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-263"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">9</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (TcEvBinds -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(TcEvBinds -&gt; HsWrapper) -&gt; c (TcEvBinds -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-var">WpLet</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-264"></span><span>                    </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">c (TcCoercionR -&gt; HsWrapper) -&gt; c HsWrapper
forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><a href="#local-6989586621680871436"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(TcCoercionR -&gt; HsWrapper) -&gt; c (TcCoercionR -&gt; HsWrapper)
forall r. r -&gt; c r
</span><a href="#local-6989586621680871435"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-var">WpMultCoercion</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-265"></span><span>
</span><span id="line-266"></span><span>  </span><span id="local-6989586621680871432"><span class="annot"><span class="annottext">toConstr :: HsWrapper -&gt; Constr
</span><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var hs-var hs-var hs-var">toConstr</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>          </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpHole_constr"><span class="hs-identifier hs-var">wpHole_constr</span></a></span><span>
</span><span id="line-267"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-type">WpCompose</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCompose_constr"><span class="hs-identifier hs-var">wpCompose_constr</span></a></span><span>
</span><span id="line-268"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-type">WpFun</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Scaled Mult
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpFun_constr"><span class="hs-identifier hs-var">wpFun_constr</span></a></span><span>
</span><span id="line-269"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCast_constr"><span class="hs-identifier hs-var">wpCast_constr</span></a></span><span>
</span><span id="line-270"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-type">WpEvLam</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvLam_constr"><span class="hs-identifier hs-var">wpEvLam_constr</span></a></span><span>
</span><span id="line-271"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-type">WpEvApp</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvApp_constr"><span class="hs-identifier hs-var">wpEvApp_constr</span></a></span><span>
</span><span id="line-272"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-type">WpTyLam</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyLam_constr"><span class="hs-identifier hs-var">wpTyLam_constr</span></a></span><span>
</span><span id="line-273"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-type">WpTyApp</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyApp_constr"><span class="hs-identifier hs-var">wpTyApp_constr</span></a></span><span>
</span><span id="line-274"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-type">WpLet</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpLet_constr"><span class="hs-identifier hs-var">wpLet_constr</span></a></span><span>
</span><span id="line-275"></span><span>  </span><span class="annot"><a href="../../base/src/Data.Data.html#toConstr"><span class="hs-identifier hs-var">toConstr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-type">WpMultCoercion</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpMultCoercion_constr"><span class="hs-identifier hs-var">wpMultCoercion_constr</span></a></span><span>
</span><span id="line-276"></span><span>
</span><span id="line-277"></span><span>  </span><span id="local-6989586621680871420"><span class="annot"><span class="annottext">dataTypeOf :: HsWrapper -&gt; DataType
</span><a href="../../base/src/Data.Data.html#dataTypeOf"><span class="hs-identifier hs-var hs-var hs-var hs-var">dataTypeOf</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DataType
</span><a href="GHC.Tc.Types.Evidence.html#hsWrapper_dataType"><span class="hs-identifier hs-var">hsWrapper_dataType</span></a></span><span>
</span><span id="line-278"></span><span>
</span><span id="line-279"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#hsWrapper_dataType"><span class="hs-identifier hs-type">hsWrapper_dataType</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/Data.Data.html#DataType"><span class="hs-identifier hs-type">Data.DataType</span></a></span><span>
</span><span id="line-280"></span><span id="hsWrapper_dataType"><span class="annot"><span class="annottext">hsWrapper_dataType :: DataType
</span><a href="GHC.Tc.Types.Evidence.html#hsWrapper_dataType"><span class="hs-identifier hs-var hs-var">hsWrapper_dataType</span></a></span></span><span>
</span><span id="line-281"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; [Constr] -&gt; DataType
</span><a href="../../base/src/Data.Data.html#mkDataType"><span class="hs-identifier hs-var">Data.mkDataType</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;HsWrapper&quot;</span></span><span>
</span><span id="line-282"></span><span>      </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpHole_constr"><span class="hs-identifier hs-var">wpHole_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCompose_constr"><span class="hs-identifier hs-var">wpCompose_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpFun_constr"><span class="hs-identifier hs-var">wpFun_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCast_constr"><span class="hs-identifier hs-var">wpCast_constr</span></a></span><span>
</span><span id="line-283"></span><span>      </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvLam_constr"><span class="hs-identifier hs-var">wpEvLam_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvApp_constr"><span class="hs-identifier hs-var">wpEvApp_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyLam_constr"><span class="hs-identifier hs-var">wpTyLam_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyApp_constr"><span class="hs-identifier hs-var">wpTyApp_constr</span></a></span><span>
</span><span id="line-284"></span><span>      </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpLet_constr"><span class="hs-identifier hs-var">wpLet_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpMultCoercion_constr"><span class="hs-identifier hs-var">wpMultCoercion_constr</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-285"></span><span>
</span><span id="line-286"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpHole_constr"><span class="hs-identifier hs-type">wpHole_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpCompose_constr"><span class="hs-identifier hs-type">wpCompose_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpFun_constr"><span class="hs-identifier hs-type">wpFun_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpCast_constr"><span class="hs-identifier hs-type">wpCast_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpEvLam_constr"><span class="hs-identifier hs-type">wpEvLam_constr</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-287"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpEvApp_constr"><span class="hs-identifier hs-type">wpEvApp_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpTyLam_constr"><span class="hs-identifier hs-type">wpTyLam_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpTyApp_constr"><span class="hs-identifier hs-type">wpTyApp_constr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpLet_constr"><span class="hs-identifier hs-type">wpLet_constr</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-288"></span><span>  </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpMultCoercion_constr"><span class="hs-identifier hs-type">wpMultCoercion_constr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/Data.Data.html#Constr"><span class="hs-identifier hs-type">Data.Constr</span></a></span><span>
</span><span id="line-289"></span><span id="wpHole_constr"><span class="annot"><span class="annottext">wpHole_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpHole_constr"><span class="hs-identifier hs-var hs-var">wpHole_constr</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpHole&quot;</span></span><span>
</span><span id="line-290"></span><span id="wpCompose_constr"><span class="annot"><span class="annottext">wpCompose_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCompose_constr"><span class="hs-identifier hs-var hs-var">wpCompose_constr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpCompose&quot;</span></span><span>
</span><span id="line-291"></span><span id="wpFun_constr"><span class="annot"><span class="annottext">wpFun_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpFun_constr"><span class="hs-identifier hs-var hs-var">wpFun_constr</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpFun&quot;</span></span><span>
</span><span id="line-292"></span><span id="wpCast_constr"><span class="annot"><span class="annottext">wpCast_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpCast_constr"><span class="hs-identifier hs-var hs-var">wpCast_constr</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpCast&quot;</span></span><span>
</span><span id="line-293"></span><span id="wpEvLam_constr"><span class="annot"><span class="annottext">wpEvLam_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvLam_constr"><span class="hs-identifier hs-var hs-var">wpEvLam_constr</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpEvLam&quot;</span></span><span>
</span><span id="line-294"></span><span id="wpEvApp_constr"><span class="annot"><span class="annottext">wpEvApp_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpEvApp_constr"><span class="hs-identifier hs-var hs-var">wpEvApp_constr</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpEvApp&quot;</span></span><span>
</span><span id="line-295"></span><span id="wpTyLam_constr"><span class="annot"><span class="annottext">wpTyLam_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyLam_constr"><span class="hs-identifier hs-var hs-var">wpTyLam_constr</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpTyLam&quot;</span></span><span>
</span><span id="line-296"></span><span id="wpTyApp_constr"><span class="annot"><span class="annottext">wpTyApp_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpTyApp_constr"><span class="hs-identifier hs-var hs-var">wpTyApp_constr</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpTyApp&quot;</span></span><span>
</span><span id="line-297"></span><span id="wpLet_constr"><span class="annot"><span class="annottext">wpLet_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpLet_constr"><span class="hs-identifier hs-var hs-var">wpLet_constr</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpLet&quot;</span></span><span>
</span><span id="line-298"></span><span id="wpMultCoercion_constr"><span class="annot"><span class="annottext">wpMultCoercion_constr :: Constr
</span><a href="GHC.Tc.Types.Evidence.html#wpMultCoercion_constr"><span class="hs-identifier hs-var hs-var">wpMultCoercion_constr</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var">mkHsWrapperConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;WpMultCoercion&quot;</span></span><span>
</span><span id="line-299"></span><span>
</span><span id="line-300"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-type">mkHsWrapperConstr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#String"><span class="hs-identifier hs-type">String</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/Data.Data.html#Constr"><span class="hs-identifier hs-type">Data.Constr</span></a></span><span>
</span><span id="line-301"></span><span id="mkHsWrapperConstr"><span class="annot"><span class="annottext">mkHsWrapperConstr :: String -&gt; Constr
</span><a href="GHC.Tc.Types.Evidence.html#mkHsWrapperConstr"><span class="hs-identifier hs-var hs-var">mkHsWrapperConstr</span></a></span></span><span> </span><span id="local-6989586621680871415"><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621680871415"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DataType -&gt; String -&gt; [String] -&gt; Fixity -&gt; Constr
</span><a href="../../base/src/Data.Data.html#mkConstr"><span class="hs-identifier hs-var">Data.mkConstr</span></a></span><span> </span><span class="annot"><span class="annottext">DataType
</span><a href="GHC.Tc.Types.Evidence.html#hsWrapper_dataType"><span class="hs-identifier hs-var">hsWrapper_dataType</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><a href="#local-6989586621680871415"><span class="hs-identifier hs-var">name</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">Fixity
</span><a href="../../base/src/Data.Data.html#Prefix"><span class="hs-identifier hs-var">Data.Prefix</span></a></span><span>
</span><span id="line-302"></span><span>
</span><span id="line-303"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wpFunEmpty"><span class="hs-identifier hs-type">wpFunEmpty</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-304"></span><span id="wpFunEmpty"><span class="annot"><span class="annottext">wpFunEmpty :: HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#wpFunEmpty"><span class="hs-identifier hs-var hs-var">wpFunEmpty</span></a></span></span><span> </span><span id="local-6989586621680871412"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871412"><span class="hs-identifier hs-var">c1</span></a></span></span><span> </span><span id="local-6989586621680871411"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871411"><span class="hs-identifier hs-var">c2</span></a></span></span><span> </span><span id="local-6989586621680871410"><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871410"><span class="hs-identifier hs-var">t1</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; SDoc -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-var">WpFun</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871412"><span class="hs-identifier hs-var">c1</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871411"><span class="hs-identifier hs-var">c2</span></a></span><span> </span><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871410"><span class="hs-identifier hs-var">t1</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#empty"><span class="hs-identifier hs-var">empty</span></a></span><span>
</span><span id="line-305"></span><span>
</span><span id="line-306"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-type">(&lt;.&gt;)</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-307"></span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span> </span><span id="%3C.%3E"><span class="annot"><span class="annottext">&lt;.&gt; :: HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var hs-var">&lt;.&gt;</span></a></span></span><span> </span><span id="local-6989586621680871408"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871408"><span class="hs-identifier hs-var">c</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871408"><span class="hs-identifier hs-var">c</span></a></span><span>
</span><span id="line-308"></span><span id="local-6989586621680871407"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871407"><span class="hs-identifier hs-var">c</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">&lt;.&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871407"><span class="hs-identifier hs-var">c</span></a></span><span>
</span><span id="line-309"></span><span id="local-6989586621680871406"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871406"><span class="hs-identifier hs-var">c1</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">&lt;.&gt;</span></a></span><span> </span><span id="local-6989586621680871405"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871405"><span class="hs-identifier hs-var">c2</span></a></span></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871406"><span class="hs-identifier hs-var">c1</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-operator hs-var">`WpCompose`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871405"><span class="hs-identifier hs-var">c2</span></a></span><span>
</span><span id="line-310"></span><span>
</span><span id="line-311"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-type">mkWpFun</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-312"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span class="hs-special">)</span><span>    </span><span class="hs-comment">-- the &quot;from&quot; type of the first wrapper</span><span>
</span><span id="line-313"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span>    </span><span class="hs-comment">-- either type of the second wrapper (used only when the</span><span>
</span><span id="line-314"></span><span>                     </span><span class="hs-comment">-- second wrapper is the identity)</span><span>
</span><span id="line-315"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>      </span><span class="hs-comment">-- what caused you to want a WpFun? Something like &quot;When converting ...&quot;</span><span>
</span><span id="line-316"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-317"></span><span id="mkWpFun"><span class="annot"><span class="annottext">mkWpFun :: HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; Mult -&gt; SDoc -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-var hs-var">mkWpFun</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>       </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>       </span><span class="annot"><span class="annottext">Scaled Mult
</span><span class="hs-identifier">_</span></span><span>  </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span>  </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-318"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-var">mkWpFun</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>       </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680871404"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871404"><span class="hs-identifier hs-var">co2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span id="local-6989586621680871402"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871402"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span id="local-6989586621680871401"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871401"><span class="hs-identifier hs-var">t1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span>  </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Role -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier hs-var">mkTcFunCo</span></a></span><span> </span><span class="annot"><span class="annottext">Role
</span><a href="GHC.Core.Coercion.Axiom.html#Representational"><span class="hs-identifier hs-var">Representational</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#multToCo"><span class="hs-identifier hs-var">multToCo</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871402"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcRepReflCo"><span class="hs-identifier hs-var">mkTcRepReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871401"><span class="hs-identifier hs-var">t1</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871404"><span class="hs-identifier hs-var">co2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-319"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-var">mkWpFun</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680871399"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871399"><span class="hs-identifier hs-var">co1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>       </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span id="local-6989586621680871398"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871398"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span id="local-6989586621680871397"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871397"><span class="hs-identifier hs-var">t2</span></a></span></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Role -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier hs-var">mkTcFunCo</span></a></span><span> </span><span class="annot"><span class="annottext">Role
</span><a href="GHC.Core.Coercion.Axiom.html#Representational"><span class="hs-identifier hs-var">Representational</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#multToCo"><span class="hs-identifier hs-var">multToCo</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871398"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSymCo"><span class="hs-identifier hs-var">mkTcSymCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871399"><span class="hs-identifier hs-var">co1</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcRepReflCo"><span class="hs-identifier hs-var">mkTcRepReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871397"><span class="hs-identifier hs-var">t2</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-320"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-var">mkWpFun</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680871396"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871396"><span class="hs-identifier hs-var">co1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680871395"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871395"><span class="hs-identifier hs-var">co2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span id="local-6989586621680871394"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871394"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span>  </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Role -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcFunCo"><span class="hs-identifier hs-var">mkTcFunCo</span></a></span><span> </span><span class="annot"><span class="annottext">Role
</span><a href="GHC.Core.Coercion.Axiom.html#Representational"><span class="hs-identifier hs-var">Representational</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#multToCo"><span class="hs-identifier hs-var">multToCo</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680871394"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSymCo"><span class="hs-identifier hs-var">mkTcSymCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871396"><span class="hs-identifier hs-var">co1</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871395"><span class="hs-identifier hs-var">co2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-321"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpFun"><span class="hs-identifier hs-var">mkWpFun</span></a></span><span> </span><span id="local-6989586621680871393"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871393"><span class="hs-identifier hs-var">co1</span></a></span></span><span>          </span><span id="local-6989586621680871392"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871392"><span class="hs-identifier hs-var">co2</span></a></span></span><span>          </span><span id="local-6989586621680871391"><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871391"><span class="hs-identifier hs-var">t1</span></a></span></span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span>  </span><span id="local-6989586621680871390"><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680871390"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; Scaled Mult -&gt; SDoc -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-var">WpFun</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871393"><span class="hs-identifier hs-var">co1</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871392"><span class="hs-identifier hs-var">co2</span></a></span><span> </span><span class="annot"><span class="annottext">Scaled Mult
</span><a href="#local-6989586621680871391"><span class="hs-identifier hs-var">t1</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680871390"><span class="hs-identifier hs-var">d</span></a></span><span>
</span><span id="line-322"></span><span>
</span><span id="line-323"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpCastR"><span class="hs-identifier hs-type">mkWpCastR</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionR"><span class="hs-identifier hs-type">TcCoercionR</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-324"></span><span id="mkWpCastR"><span class="annot"><span class="annottext">mkWpCastR :: TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpCastR"><span class="hs-identifier hs-var hs-var">mkWpCastR</span></a></span></span><span> </span><span id="local-6989586621680871389"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871389"><span class="hs-identifier hs-var">co</span></a></span></span><span>
</span><span id="line-325"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier hs-var">isTcReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871389"><span class="hs-identifier hs-var">co</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-326"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier">ASSERT2</span><span class="hs-special">(</span><span class="hs-identifier">tcCoercionRole</span><span> </span><span class="hs-identifier">co</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-identifier">Representational</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">ppr</span><span> </span><span class="hs-identifier">co</span><span class="hs-special">)</span><span>
</span><span id="line-327"></span><span>                    </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871389"><span class="hs-identifier hs-var">co</span></a></span><span>
</span><span id="line-328"></span><span>
</span><span id="line-329"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpCastN"><span class="hs-identifier hs-type">mkWpCastN</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercionN"><span class="hs-identifier hs-type">TcCoercionN</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-330"></span><span id="mkWpCastN"><span class="annot"><span class="annottext">mkWpCastN :: TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpCastN"><span class="hs-identifier hs-var hs-var">mkWpCastN</span></a></span></span><span> </span><span id="local-6989586621680871383"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871383"><span class="hs-identifier hs-var">co</span></a></span></span><span>
</span><span id="line-331"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier hs-var">isTcReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871383"><span class="hs-identifier hs-var">co</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-332"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="hs-identifier">ASSERT2</span><span class="hs-special">(</span><span class="hs-identifier">tcCoercionRole</span><span> </span><span class="hs-identifier">co</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-identifier">Nominal</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">ppr</span><span> </span><span class="hs-identifier">co</span><span class="hs-special">)</span><span>
</span><span id="line-333"></span><span>                    </span><span class="annot"><span class="annottext">TcCoercionR -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-var">WpCast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#mkTcSubCo"><span class="hs-identifier hs-var">mkTcSubCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871383"><span class="hs-identifier hs-var">co</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-334"></span><span>    </span><span class="hs-comment">-- The mkTcSubCo converts Nominal to Representational</span><span>
</span><span id="line-335"></span><span>
</span><span id="line-336"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpTyApps"><span class="hs-identifier hs-type">mkWpTyApps</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-337"></span><span id="mkWpTyApps"><span class="annot"><span class="annottext">mkWpTyApps :: [Mult] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpTyApps"><span class="hs-identifier hs-var hs-var">mkWpTyApps</span></a></span></span><span> </span><span id="local-6989586621680871380"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871380"><span class="hs-identifier hs-var">tys</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Mult -&gt; HsWrapper) -&gt; [Mult] -&gt; HsWrapper
forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_app_fn"><span class="hs-identifier hs-var">mk_co_app_fn</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-var">WpTyApp</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871380"><span class="hs-identifier hs-var">tys</span></a></span><span>
</span><span id="line-338"></span><span>
</span><span id="line-339"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpEvApps"><span class="hs-identifier hs-type">mkWpEvApps</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-340"></span><span id="mkWpEvApps"><span class="annot"><span class="annottext">mkWpEvApps :: [EvTerm] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpEvApps"><span class="hs-identifier hs-var hs-var">mkWpEvApps</span></a></span></span><span> </span><span id="local-6989586621680871378"><span class="annot"><span class="annottext">[EvTerm]
</span><a href="#local-6989586621680871378"><span class="hs-identifier hs-var">args</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvTerm -&gt; HsWrapper) -&gt; [EvTerm] -&gt; HsWrapper
forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_app_fn"><span class="hs-identifier hs-var">mk_co_app_fn</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-var">WpEvApp</span></a></span><span> </span><span class="annot"><span class="annottext">[EvTerm]
</span><a href="#local-6989586621680871378"><span class="hs-identifier hs-var">args</span></a></span><span>
</span><span id="line-341"></span><span>
</span><span id="line-342"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpEvVarApps"><span class="hs-identifier hs-type">mkWpEvVarApps</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-343"></span><span id="mkWpEvVarApps"><span class="annot"><span class="annottext">mkWpEvVarApps :: [Id] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpEvVarApps"><span class="hs-identifier hs-var hs-var">mkWpEvVarApps</span></a></span></span><span> </span><span id="local-6989586621680871377"><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871377"><span class="hs-identifier hs-var">vs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvTerm -&gt; HsWrapper) -&gt; [EvTerm] -&gt; HsWrapper
forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_app_fn"><span class="hs-identifier hs-var">mk_co_app_fn</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-var">WpEvApp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Id -&gt; EvTerm) -&gt; [Id] -&gt; [EvTerm]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="annot"><span class="annottext">(EvExpr -&gt; EvTerm) -&gt; (Id -&gt; EvExpr) -&gt; Id -&gt; EvTerm
forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c
</span><a href="../../base/src/GHC.Base.html#."><span class="hs-operator hs-var">.</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; EvExpr
</span><a href="GHC.Tc.Types.Evidence.html#evId"><span class="hs-identifier hs-var">evId</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871377"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-344"></span><span>
</span><span id="line-345"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpTyLams"><span class="hs-identifier hs-type">mkWpTyLams</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-346"></span><span id="mkWpTyLams"><span class="annot"><span class="annottext">mkWpTyLams :: [Id] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpTyLams"><span class="hs-identifier hs-var hs-var">mkWpTyLams</span></a></span></span><span> </span><span id="local-6989586621680871374"><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871374"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; [Id] -&gt; HsWrapper
forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_lam_fn"><span class="hs-identifier hs-var">mk_co_lam_fn</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-var">WpTyLam</span></a></span><span> </span><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871374"><span class="hs-identifier hs-var">ids</span></a></span><span>
</span><span id="line-347"></span><span>
</span><span id="line-348"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpLams"><span class="hs-identifier hs-type">mkWpLams</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-349"></span><span id="mkWpLams"><span class="annot"><span class="annottext">mkWpLams :: [Id] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpLams"><span class="hs-identifier hs-var hs-var">mkWpLams</span></a></span></span><span> </span><span id="local-6989586621680871371"><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871371"><span class="hs-identifier hs-var">ids</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Id -&gt; HsWrapper) -&gt; [Id] -&gt; HsWrapper
forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_lam_fn"><span class="hs-identifier hs-var">mk_co_lam_fn</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-var">WpEvLam</span></a></span><span> </span><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680871371"><span class="hs-identifier hs-var">ids</span></a></span><span>
</span><span id="line-350"></span><span>
</span><span id="line-351"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpLet"><span class="hs-identifier hs-type">mkWpLet</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-352"></span><span class="hs-comment">-- This no-op is a quite a common case</span><span>
</span><span id="line-353"></span><span id="mkWpLet"><span class="annot"><span class="annottext">mkWpLet :: TcEvBinds -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpLet"><span class="hs-identifier hs-var hs-var">mkWpLet</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBinds"><span class="hs-identifier hs-type">EvBinds</span></a></span><span> </span><span id="local-6989586621680871369"><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680871369"><span class="hs-identifier hs-var">b</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bag EvBind -&gt; Bool
forall a. Bag a -&gt; Bool
</span><a href="GHC.Data.Bag.html#isEmptyBag"><span class="hs-identifier hs-var">isEmptyBag</span></a></span><span> </span><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680871369"><span class="hs-identifier hs-var">b</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-354"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWpLet"><span class="hs-identifier hs-var">mkWpLet</span></a></span><span> </span><span id="local-6989586621680871367"><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680871367"><span class="hs-identifier hs-var">ev_binds</span></a></span></span><span>                   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcEvBinds -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-var">WpLet</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680871367"><span class="hs-identifier hs-var">ev_binds</span></a></span><span>
</span><span id="line-355"></span><span>
</span><span id="line-356"></span><span id="local-6989586621680871366"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mk_co_lam_fn"><span class="hs-identifier hs-type">mk_co_lam_fn</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621680871366"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="#local-6989586621680871366"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span></span><span>
</span><span id="line-357"></span><span id="mk_co_lam_fn"><span class="annot"><span class="annottext">mk_co_lam_fn :: forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_lam_fn"><span class="hs-identifier hs-var hs-var">mk_co_lam_fn</span></a></span></span><span> </span><span id="local-6989586621680871364"><span class="annot"><span class="annottext">a -&gt; HsWrapper
</span><a href="#local-6989586621680871364"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621680871363"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871363"><span class="hs-keyword hs-var">as</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(a -&gt; HsWrapper -&gt; HsWrapper) -&gt; HsWrapper -&gt; [a] -&gt; HsWrapper
forall (t :: * -&gt; *) a b.
Foldable t =&gt;
(a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldr"><span class="hs-identifier hs-var">foldr</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621680871361"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871361"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621680871360"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871360"><span class="hs-identifier hs-var">wrap</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">a -&gt; HsWrapper
</span><a href="#local-6989586621680871364"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871361"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">&lt;.&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871360"><span class="hs-identifier hs-var">wrap</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871363"><span class="hs-keyword hs-var">as</span></a></span><span>
</span><span id="line-358"></span><span>
</span><span id="line-359"></span><span id="local-6989586621680871977"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mk_co_app_fn"><span class="hs-identifier hs-type">mk_co_app_fn</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="#local-6989586621680871977"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="#local-6989586621680871977"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span></span><span>
</span><span id="line-360"></span><span class="hs-comment">-- For applications, the *first* argument must</span><span>
</span><span id="line-361"></span><span class="hs-comment">-- come *last* in the composition sequence</span><span>
</span><span id="line-362"></span><span id="mk_co_app_fn"><span class="annot"><span class="annottext">mk_co_app_fn :: forall a. (a -&gt; HsWrapper) -&gt; [a] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mk_co_app_fn"><span class="hs-identifier hs-var hs-var">mk_co_app_fn</span></a></span></span><span> </span><span id="local-6989586621680871358"><span class="annot"><span class="annottext">a -&gt; HsWrapper
</span><a href="#local-6989586621680871358"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621680871357"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871357"><span class="hs-keyword hs-var">as</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(a -&gt; HsWrapper -&gt; HsWrapper) -&gt; HsWrapper -&gt; [a] -&gt; HsWrapper
forall (t :: * -&gt; *) a b.
Foldable t =&gt;
(a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldr"><span class="hs-identifier hs-var">foldr</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621680871356"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871356"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621680871355"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871355"><span class="hs-identifier hs-var">wrap</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871355"><span class="hs-identifier hs-var">wrap</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">&lt;.&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">a -&gt; HsWrapper
</span><a href="#local-6989586621680871358"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871356"><span class="hs-identifier hs-var">x</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span> </span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871357"><span class="hs-keyword hs-var">as</span></a></span><span>
</span><span id="line-363"></span><span>
</span><span id="line-364"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#idHsWrapper"><span class="hs-identifier hs-type">idHsWrapper</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-365"></span><span id="idHsWrapper"><span class="annot"><span class="annottext">idHsWrapper :: HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#idHsWrapper"><span class="hs-identifier hs-var hs-var">idHsWrapper</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>
</span><span id="line-366"></span><span>
</span><span id="line-367"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isIdHsWrapper"><span class="hs-identifier hs-type">isIdHsWrapper</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-368"></span><span id="isIdHsWrapper"><span class="annot"><span class="annottext">isIdHsWrapper :: HsWrapper -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isIdHsWrapper"><span class="hs-identifier hs-var hs-var">isIdHsWrapper</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-369"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isIdHsWrapper"><span class="hs-identifier hs-var">isIdHsWrapper</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-370"></span><span>
</span><span id="line-371"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#hsWrapDictBinders"><span class="hs-identifier hs-type">hsWrapDictBinders</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.Bag.html#Bag"><span class="hs-identifier hs-type">Bag</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#DictId"><span class="hs-identifier hs-type">DictId</span></a></span><span>
</span><span id="line-372"></span><span class="hs-comment">-- ^ Identifies the /lambda-bound/ dictionaries of an 'HsWrapper'. This is used</span><span>
</span><span id="line-373"></span><span class="hs-comment">-- (only) to allow the pattern-match overlap checker to know what Given</span><span>
</span><span id="line-374"></span><span class="hs-comment">-- dictionaries are in scope.</span><span>
</span><span id="line-375"></span><span class="hs-comment">--</span><span>
</span><span id="line-376"></span><span class="hs-comment">-- We specifically do not collect dictionaries bound in a 'WpLet'. These are</span><span>
</span><span id="line-377"></span><span class="hs-comment">-- either superclasses of lambda-bound ones, or (extremely numerous) results of</span><span>
</span><span id="line-378"></span><span class="hs-comment">-- binding Wanted dictionaries.  We definitely don't want all those cluttering</span><span>
</span><span id="line-379"></span><span class="hs-comment">-- up the Given dictionaries for pattern-match overlap checking!</span><span>
</span><span id="line-380"></span><span id="hsWrapDictBinders"><span class="annot"><span class="annottext">hsWrapDictBinders :: HsWrapper -&gt; Bag Id
</span><a href="GHC.Tc.Types.Evidence.html#hsWrapDictBinders"><span class="hs-identifier hs-var hs-var">hsWrapDictBinders</span></a></span></span><span> </span><span id="local-6989586621680871353"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871353"><span class="hs-identifier hs-var">wrap</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; Bag Id
</span><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871353"><span class="hs-identifier hs-var">wrap</span></a></span><span>
</span><span id="line-381"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-382"></span><span>   </span><span id="local-6989586621680871352"><span class="annot"><span class="annottext">go :: HsWrapper -&gt; Bag Id
</span><a href="#local-6989586621680871352"><span class="hs-identifier hs-var hs-var">go</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-type">WpEvLam</span></a></span><span> </span><span id="local-6989586621680871351"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871351"><span class="hs-identifier hs-var">dict_id</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; Bag Id
forall a. a -&gt; Bag a
</span><a href="GHC.Data.Bag.html#unitBag"><span class="hs-identifier hs-var">unitBag</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871351"><span class="hs-identifier hs-var">dict_id</span></a></span><span>
</span><span id="line-383"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621680871349"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871349"><span class="hs-identifier hs-var">w1</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-operator hs-type">`WpCompose`</span></a></span><span> </span><span id="local-6989586621680871348"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871348"><span class="hs-identifier hs-var">w2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; Bag Id
</span><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871349"><span class="hs-identifier hs-var">w1</span></a></span><span> </span><span class="annot"><span class="annottext">Bag Id -&gt; Bag Id -&gt; Bag Id
forall a. Bag a -&gt; Bag a -&gt; Bag a
</span><a href="GHC.Data.Bag.html#unionBags"><span class="hs-operator hs-var">`unionBags`</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; Bag Id
</span><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871348"><span class="hs-identifier hs-var">w2</span></a></span><span>
</span><span id="line-384"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-type">WpFun</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680871346"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871346"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="annot"><span class="annottext">Scaled Mult
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; Bag Id
</span><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871346"><span class="hs-identifier hs-var">w</span></a></span><span>
</span><span id="line-385"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>              </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-386"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span>  </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-387"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-type">WpEvApp</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-388"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-type">WpTyLam</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-389"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-type">WpTyApp</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-390"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-type">WpLet</span></a></span><span>   </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-391"></span><span>   </span><span class="annot"><a href="#local-6989586621680871352"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-type">WpMultCoercion</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag Id
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-392"></span><span>
</span><span id="line-393"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#collectHsWrapBinders"><span class="hs-identifier hs-type">collectHsWrapBinders</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-394"></span><span class="hs-comment">-- Collect the outer lambda binders of a HsWrapper,</span><span>
</span><span id="line-395"></span><span class="hs-comment">-- stopping as soon as you get to a non-lambda binder</span><span>
</span><span id="line-396"></span><span id="collectHsWrapBinders"><span class="annot"><span class="annottext">collectHsWrapBinders :: HsWrapper -&gt; ([Id], HsWrapper)
</span><a href="GHC.Tc.Types.Evidence.html#collectHsWrapBinders"><span class="hs-identifier hs-var hs-var">collectHsWrapBinders</span></a></span></span><span> </span><span id="local-6989586621680871344"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871344"><span class="hs-identifier hs-var">wrap</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; [HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871344"><span class="hs-identifier hs-var">wrap</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-397"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-398"></span><span>    </span><span class="hs-comment">-- go w ws = collectHsWrapBinders (w &lt;.&gt; w1 &lt;.&gt; ... &lt;.&gt; wn)</span><span>
</span><span id="line-399"></span><span>    </span><span class="annot"><a href="#local-6989586621680871343"><span class="hs-identifier hs-type">go</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-400"></span><span>    </span><span id="local-6989586621680871343"><span class="annot"><span class="annottext">go :: HsWrapper -&gt; [HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871343"><span class="hs-identifier hs-var hs-var">go</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-type">WpEvLam</span></a></span><span> </span><span id="local-6989586621680871342"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871342"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">)</span><span>       </span><span id="local-6989586621680871341"><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871341"><span class="hs-identifier hs-var">wraps</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; ([Id], HsWrapper) -&gt; ([Id], HsWrapper)
forall {a} {b}. a -&gt; ([a], b) -&gt; ([a], b)
</span><a href="#local-6989586621680871340"><span class="hs-identifier hs-var">add_lam</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871342"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871339"><span class="hs-identifier hs-var">gos</span></a></span><span> </span><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871341"><span class="hs-identifier hs-var">wraps</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-401"></span><span>    </span><span class="annot"><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-type">WpTyLam</span></a></span><span> </span><span id="local-6989586621680871338"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871338"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">)</span><span>       </span><span id="local-6989586621680871337"><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871337"><span class="hs-identifier hs-var">wraps</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; ([Id], HsWrapper) -&gt; ([Id], HsWrapper)
forall {a} {b}. a -&gt; ([a], b) -&gt; ([a], b)
</span><a href="#local-6989586621680871340"><span class="hs-identifier hs-var">add_lam</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871338"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871339"><span class="hs-identifier hs-var">gos</span></a></span><span> </span><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871337"><span class="hs-identifier hs-var">wraps</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-402"></span><span>    </span><span class="annot"><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-type">WpCompose</span></a></span><span> </span><span id="local-6989586621680871336"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871336"><span class="hs-identifier hs-var">w1</span></a></span></span><span> </span><span id="local-6989586621680871335"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871335"><span class="hs-identifier hs-var">w2</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621680871334"><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871334"><span class="hs-identifier hs-var">wraps</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; [HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871336"><span class="hs-identifier hs-var">w1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871335"><span class="hs-identifier hs-var">w2</span></a></span><span class="annot"><span class="annottext">HsWrapper -&gt; [HsWrapper] -&gt; [HsWrapper]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871334"><span class="hs-identifier hs-var">wraps</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-403"></span><span>    </span><span class="annot"><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span id="local-6989586621680871333"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871333"><span class="hs-identifier hs-var">wrap</span></a></span></span><span>              </span><span id="local-6989586621680871332"><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871332"><span class="hs-identifier hs-var">wraps</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">(HsWrapper -&gt; HsWrapper -&gt; HsWrapper)
-&gt; HsWrapper -&gt; [HsWrapper] -&gt; HsWrapper
forall (t :: * -&gt; *) b a.
Foldable t =&gt;
(b -&gt; a -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldl%27"><span class="hs-identifier hs-var">foldl'</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">(&lt;.&gt;)</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871333"><span class="hs-identifier hs-var">wrap</span></a></span><span> </span><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871332"><span class="hs-identifier hs-var">wraps</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-404"></span><span>
</span><span id="line-405"></span><span>    </span><span id="local-6989586621680871339"><span class="annot"><span class="annottext">gos :: [HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871339"><span class="hs-identifier hs-var hs-var">gos</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-406"></span><span>    </span><span class="annot"><a href="#local-6989586621680871339"><span class="hs-identifier hs-var">gos</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621680871330"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871330"><span class="hs-identifier hs-var">w</span></a></span></span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span id="local-6989586621680871329"><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871329"><span class="hs-identifier hs-var">ws</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; [HsWrapper] -&gt; ([Id], HsWrapper)
</span><a href="#local-6989586621680871343"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871330"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">[HsWrapper]
</span><a href="#local-6989586621680871329"><span class="hs-identifier hs-var">ws</span></a></span><span>
</span><span id="line-407"></span><span>
</span><span id="line-408"></span><span>    </span><span id="local-6989586621680871340"><span class="annot"><span class="annottext">add_lam :: a -&gt; ([a], b) -&gt; ([a], b)
</span><a href="#local-6989586621680871340"><span class="hs-identifier hs-var hs-var">add_lam</span></a></span></span><span> </span><span id="local-6989586621680871328"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871328"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621680871327"><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871327"><span class="hs-identifier hs-var">vs</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621680871326"><span class="annot"><span class="annottext">b
</span><a href="#local-6989586621680871326"><span class="hs-identifier hs-var">w</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871328"><span class="hs-identifier hs-var">v</span></a></span><span class="annot"><span class="annottext">a -&gt; [a] -&gt; [a]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[a]
</span><a href="#local-6989586621680871327"><span class="hs-identifier hs-var">vs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">b
</span><a href="#local-6989586621680871326"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-409"></span><span>
</span><span id="line-410"></span><span class="hs-comment">{-
************************************************************************
*                                                                      *
                  Evidence bindings
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-417"></span><span>
</span><span id="line-418"></span><span class="hs-keyword">data</span><span> </span><span id="TcEvBinds"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-var">TcEvBinds</span></a></span></span><span>
</span><span id="line-419"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="TcEvBinds"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-var">TcEvBinds</span></a></span></span><span>           </span><span class="hs-comment">-- Mutable evidence bindings</span><span>
</span><span id="line-420"></span><span>       </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span><span>       </span><span class="hs-comment">-- Mutable because they are updated &quot;later&quot;</span><span>
</span><span id="line-421"></span><span>                        </span><span class="hs-comment">--    when an implication constraint is solved</span><span>
</span><span id="line-422"></span><span>
</span><span id="line-423"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvBinds"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBinds"><span class="hs-identifier hs-var">EvBinds</span></a></span></span><span>             </span><span class="hs-comment">-- Immutable after zonking</span><span>
</span><span id="line-424"></span><span>       </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Data.Bag.html#Bag"><span class="hs-identifier hs-type">Bag</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-425"></span><span>
</span><span id="line-426"></span><span class="hs-keyword">data</span><span> </span><span id="EvBindsVar"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-var">EvBindsVar</span></a></span></span><span>
</span><span id="line-427"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvBindsVar"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-var">EvBindsVar</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-428"></span><span>      </span><span id="ebv_uniq"><span class="annot"><span class="annottext">EvBindsVar -&gt; Unique
</span><a href="GHC.Tc.Types.Evidence.html#ebv_uniq"><span class="hs-identifier hs-var hs-var">ebv_uniq</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-429"></span><span>         </span><span class="hs-comment">-- The Unique is for debug printing only</span><span>
</span><span id="line-430"></span><span>
</span><span id="line-431"></span><span>      </span><span id="ebv_binds"><span class="annot"><span class="annottext">EvBindsVar -&gt; IORef EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#ebv_binds"><span class="hs-identifier hs-var hs-var">ebv_binds</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier hs-type">IORef</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-432"></span><span>      </span><span class="hs-comment">-- The main payload: the value-level evidence bindings</span><span>
</span><span id="line-433"></span><span>      </span><span class="hs-comment">--     (dictionaries etc)</span><span>
</span><span id="line-434"></span><span>      </span><span class="hs-comment">-- Some Given, some Wanted</span><span>
</span><span id="line-435"></span><span>
</span><span id="line-436"></span><span>      </span><span id="ebv_tcvs"><span class="annot"><span class="annottext">EvBindsVar -&gt; IORef CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#ebv_tcvs"><span class="hs-identifier hs-var hs-var">ebv_tcvs</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier hs-type">IORef</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#CoVarSet"><span class="hs-identifier hs-type">CoVarSet</span></a></span><span>
</span><span id="line-437"></span><span>      </span><span class="hs-comment">-- The free Given coercion vars needed by Wanted coercions that</span><span>
</span><span id="line-438"></span><span>      </span><span class="hs-comment">-- are solved by filling in their HoleDest in-place. Since they</span><span>
</span><span id="line-439"></span><span>      </span><span class="hs-comment">-- don't appear in ebv_binds, we keep track of their free</span><span>
</span><span id="line-440"></span><span>      </span><span class="hs-comment">-- variables so that we can report unused given constraints</span><span>
</span><span id="line-441"></span><span>      </span><span class="hs-comment">-- See Note [Tracking redundant constraints] in GHC.Tc.Solver</span><span>
</span><span id="line-442"></span><span>    </span><span class="hs-special">}</span><span>
</span><span id="line-443"></span><span>
</span><span id="line-444"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="CoEvBindsVar"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#CoEvBindsVar"><span class="hs-identifier hs-var">CoEvBindsVar</span></a></span></span><span> </span><span class="hs-special">{</span><span>  </span><span class="hs-comment">-- See Note [Coercion evidence only]</span><span>
</span><span id="line-445"></span><span>
</span><span id="line-446"></span><span>      </span><span class="hs-comment">-- See above for comments on ebv_uniq, ebv_tcvs</span><span>
</span><span id="line-447"></span><span>      </span><span id="ebv_uniq"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#ebv_uniq"><span class="hs-identifier hs-var">ebv_uniq</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Unique"><span class="hs-identifier hs-type">Unique</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-448"></span><span>      </span><span id="ebv_tcvs"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#ebv_tcvs"><span class="hs-identifier hs-var">ebv_tcvs</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="../../base/src/GHC.IORef.html#IORef"><span class="hs-identifier hs-type">IORef</span></a></span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#CoVarSet"><span class="hs-identifier hs-type">CoVarSet</span></a></span><span>
</span><span id="line-449"></span><span>    </span><span class="hs-special">}</span><span>
</span><span id="line-450"></span><span>
</span><span id="line-451"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680871293"><span id="local-6989586621680871295"><span id="local-6989586621680871297"><span id="local-6989586621680871299"><span id="local-6989586621680871301"><span id="local-6989586621680871303"><span id="local-6989586621680871305"><span id="local-6989586621680871307"><span id="local-6989586621680871309"><span id="local-6989586621680871311"><span id="local-6989586621680871316"><span class="annot"><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-type">Data.Data</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span></span></span></span></span></span></span></span></span></span></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-452"></span><span>  </span><span class="hs-comment">-- Placeholder; we can't travers into TcEvBinds</span><span>
</span><span id="line-453"></span><span>  </span><span id="local-6989586621680871292"><span class="annot"><span class="annottext">toConstr :: TcEvBinds -&gt; Constr
</span><a href="#local-6989586621680871292"><span class="hs-identifier hs-var hs-var hs-var hs-var">toConstr</span></a></span></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><span class="hs-identifier">_</span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr
</span><a href="GHC.Utils.Misc.html#abstractConstr"><span class="hs-identifier hs-var">abstractConstr</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;TcEvBinds&quot;</span></span><span>
</span><span id="line-454"></span><span>  </span><span id="local-6989586621680871288"><span class="annot"><span class="annottext">gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c TcEvBinds
</span><a href="#local-6989586621680871288"><span class="hs-identifier hs-var hs-var hs-var hs-var">gunfold</span></a></span></span><span> </span><span class="annot"><span class="annottext">forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">forall r. r -&gt; c r
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Constr -&gt; c TcEvBinds
forall a. HasCallStack =&gt; String -&gt; a
</span><a href="../../base/src/GHC.Err.html#error"><span class="hs-identifier hs-var">error</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;gunfold&quot;</span></span><span>
</span><span id="line-455"></span><span>  </span><span id="local-6989586621680871286"><span class="annot"><span class="annottext">dataTypeOf :: TcEvBinds -&gt; DataType
</span><a href="#local-6989586621680871286"><span class="hs-identifier hs-var hs-var hs-var hs-var">dataTypeOf</span></a></span></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; DataType
</span><a href="../../base/src/Data.Data.html#mkNoRepType"><span class="hs-identifier hs-var">Data.mkNoRepType</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;TcEvBinds&quot;</span></span><span>
</span><span id="line-456"></span><span>
</span><span id="line-457"></span><span class="hs-comment">{- Note [Coercion evidence only]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Class constraints etc give rise to /term/ bindings for evidence, and
we have nowhere to put term bindings in /types/.  So in some places we
use CoEvBindsVar (see newCoTcEvBinds) to signal that no term-level
evidence bindings are allowed.  Notebly ():

  - Places in types where we are solving kind constraints (all of which
    are equalities); see solveEqualities, solveLocalEqualities

  - When unifying forall-types
-}</span><span>
</span><span id="line-469"></span><span>
</span><span id="line-470"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isCoEvBindsVar"><span class="hs-identifier hs-type">isCoEvBindsVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-471"></span><span id="isCoEvBindsVar"><span class="annot"><span class="annottext">isCoEvBindsVar :: EvBindsVar -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isCoEvBindsVar"><span class="hs-identifier hs-var hs-var">isCoEvBindsVar</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#CoEvBindsVar"><span class="hs-identifier hs-type">CoEvBindsVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>
</span><span id="line-472"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isCoEvBindsVar"><span class="hs-identifier hs-var">isCoEvBindsVar</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-473"></span><span>
</span><span id="line-474"></span><span class="hs-comment">-----------------</span><span>
</span><span id="line-475"></span><span class="hs-keyword">newtype</span><span> </span><span id="EvBindMap"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-var">EvBindMap</span></a></span></span><span>
</span><span id="line-476"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvBindMap"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-var">EvBindMap</span></a></span></span><span> </span><span class="hs-special">{</span><span>
</span><span id="line-477"></span><span>       </span><span id="ev_bind_varenv"><span class="annot"><span class="annottext">EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var hs-var">ev_bind_varenv</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.Env.html#DVarEnv"><span class="hs-identifier hs-type">DVarEnv</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span>
</span><span id="line-478"></span><span>    </span><span class="hs-special">}</span><span>       </span><span class="hs-comment">-- Map from evidence variables to evidence terms</span><span>
</span><span id="line-479"></span><span>            </span><span class="hs-comment">-- We use @DVarEnv@ here to get deterministic ordering when we</span><span>
</span><span id="line-480"></span><span>            </span><span class="hs-comment">-- turn it into a Bag.</span><span>
</span><span id="line-481"></span><span>            </span><span class="hs-comment">-- If we don't do that, when we generate let bindings for</span><span>
</span><span id="line-482"></span><span>            </span><span class="hs-comment">-- dictionaries in dsTcEvBinds they will be generated in random</span><span>
</span><span id="line-483"></span><span>            </span><span class="hs-comment">-- order.</span><span>
</span><span id="line-484"></span><span>            </span><span class="hs-comment">--</span><span>
</span><span id="line-485"></span><span>            </span><span class="hs-comment">-- For example:</span><span>
</span><span id="line-486"></span><span>            </span><span class="hs-comment">--</span><span>
</span><span id="line-487"></span><span>            </span><span class="hs-comment">-- let $dEq = GHC.Classes.$fEqInt in</span><span>
</span><span id="line-488"></span><span>            </span><span class="hs-comment">-- let $$dNum = GHC.Num.$fNumInt in ...</span><span>
</span><span id="line-489"></span><span>            </span><span class="hs-comment">--</span><span>
</span><span id="line-490"></span><span>            </span><span class="hs-comment">-- vs</span><span>
</span><span id="line-491"></span><span>            </span><span class="hs-comment">--</span><span>
</span><span id="line-492"></span><span>            </span><span class="hs-comment">-- let $dNum = GHC.Num.$fNumInt in</span><span>
</span><span id="line-493"></span><span>            </span><span class="hs-comment">-- let $dEq = GHC.Classes.$fEqInt in ...</span><span>
</span><span id="line-494"></span><span>            </span><span class="hs-comment">--</span><span>
</span><span id="line-495"></span><span>            </span><span class="hs-comment">-- See Note [Deterministic UniqFM] in GHC.Types.Unique.DFM for explanation why</span><span>
</span><span id="line-496"></span><span>            </span><span class="hs-comment">-- @UniqFM@ can lead to nondeterministic order.</span><span>
</span><span id="line-497"></span><span>
</span><span id="line-498"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#emptyEvBindMap"><span class="hs-identifier hs-type">emptyEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span>
</span><span id="line-499"></span><span id="emptyEvBindMap"><span class="annot"><span class="annottext">emptyEvBindMap :: EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#emptyEvBindMap"><span class="hs-identifier hs-var hs-var">emptyEvBindMap</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBindMap :: DVarEnv EvBind -&gt; EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ev_bind_varenv :: DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var">ev_bind_varenv</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
forall a. DVarEnv a
</span><a href="GHC.Types.Var.Env.html#emptyDVarEnv"><span class="hs-identifier hs-var">emptyDVarEnv</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-500"></span><span>
</span><span id="line-501"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#extendEvBinds"><span class="hs-identifier hs-type">extendEvBinds</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span>
</span><span id="line-502"></span><span id="extendEvBinds"><span class="annot"><span class="annottext">extendEvBinds :: EvBindMap -&gt; EvBind -&gt; EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#extendEvBinds"><span class="hs-identifier hs-var hs-var">extendEvBinds</span></a></span></span><span> </span><span id="local-6989586621680871281"><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871281"><span class="hs-identifier hs-var">bs</span></a></span></span><span> </span><span id="local-6989586621680871280"><span class="annot"><span class="annottext">EvBind
</span><a href="#local-6989586621680871280"><span class="hs-identifier hs-var">ev_bind</span></a></span></span><span>
</span><span id="line-503"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBindMap :: DVarEnv EvBind -&gt; EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ev_bind_varenv :: DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var">ev_bind_varenv</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind -&gt; Id -&gt; EvBind -&gt; DVarEnv EvBind
forall a. DVarEnv a -&gt; Id -&gt; a -&gt; DVarEnv a
</span><a href="GHC.Types.Var.Env.html#extendDVarEnv"><span class="hs-identifier hs-var">extendDVarEnv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var hs-var">ev_bind_varenv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871281"><span class="hs-identifier hs-var">bs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-504"></span><span>                                               </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var hs-var">eb_lhs</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind
</span><a href="#local-6989586621680871280"><span class="hs-identifier hs-var">ev_bind</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-505"></span><span>                                               </span><span class="annot"><span class="annottext">EvBind
</span><a href="#local-6989586621680871280"><span class="hs-identifier hs-var">ev_bind</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-506"></span><span>
</span><span id="line-507"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isEmptyEvBindMap"><span class="hs-identifier hs-type">isEmptyEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-508"></span><span id="isEmptyEvBindMap"><span class="annot"><span class="annottext">isEmptyEvBindMap :: EvBindMap -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isEmptyEvBindMap"><span class="hs-identifier hs-var hs-var">isEmptyEvBindMap</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span id="local-6989586621680871277"><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871277"><span class="hs-identifier hs-var">m</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind -&gt; Bool
forall a. DVarEnv a -&gt; Bool
</span><a href="GHC.Types.Var.Env.html#isEmptyDVarEnv"><span class="hs-identifier hs-var">isEmptyDVarEnv</span></a></span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871277"><span class="hs-identifier hs-var">m</span></a></span><span>
</span><span id="line-509"></span><span>
</span><span id="line-510"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#lookupEvBind"><span class="hs-identifier hs-type">lookupEvBind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span>
</span><span id="line-511"></span><span id="lookupEvBind"><span class="annot"><span class="annottext">lookupEvBind :: EvBindMap -&gt; Id -&gt; Maybe EvBind
</span><a href="GHC.Tc.Types.Evidence.html#lookupEvBind"><span class="hs-identifier hs-var hs-var">lookupEvBind</span></a></span></span><span> </span><span id="local-6989586621680871275"><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871275"><span class="hs-identifier hs-var">bs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind -&gt; Id -&gt; Maybe EvBind
forall a. DVarEnv a -&gt; Id -&gt; Maybe a
</span><a href="GHC.Types.Var.Env.html#lookupDVarEnv"><span class="hs-identifier hs-var">lookupDVarEnv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var hs-var">ev_bind_varenv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871275"><span class="hs-identifier hs-var">bs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-512"></span><span>
</span><span id="line-513"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindMapBinds"><span class="hs-identifier hs-type">evBindMapBinds</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Data.Bag.html#Bag"><span class="hs-identifier hs-type">Bag</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span>
</span><span id="line-514"></span><span id="evBindMapBinds"><span class="annot"><span class="annottext">evBindMapBinds :: EvBindMap -&gt; Bag EvBind
</span><a href="GHC.Tc.Types.Evidence.html#evBindMapBinds"><span class="hs-identifier hs-var hs-var">evBindMapBinds</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvBind -&gt; Bag EvBind -&gt; Bag EvBind)
-&gt; Bag EvBind -&gt; EvBindMap -&gt; Bag EvBind
forall a. (EvBind -&gt; a -&gt; a) -&gt; a -&gt; EvBindMap -&gt; a
</span><a href="GHC.Tc.Types.Evidence.html#foldEvBindMap"><span class="hs-identifier hs-var">foldEvBindMap</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; Bag EvBind -&gt; Bag EvBind
forall a. a -&gt; Bag a -&gt; Bag a
</span><a href="GHC.Data.Bag.html#consBag"><span class="hs-identifier hs-var">consBag</span></a></span><span> </span><span class="annot"><span class="annottext">Bag EvBind
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-515"></span><span>
</span><span id="line-516"></span><span id="local-6989586621680871945"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#foldEvBindMap"><span class="hs-identifier hs-type">foldEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871945"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871945"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871945"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871945"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-517"></span><span id="foldEvBindMap"><span class="annot"><span class="annottext">foldEvBindMap :: forall a. (EvBind -&gt; a -&gt; a) -&gt; a -&gt; EvBindMap -&gt; a
</span><a href="GHC.Tc.Types.Evidence.html#foldEvBindMap"><span class="hs-identifier hs-var hs-var">foldEvBindMap</span></a></span></span><span> </span><span id="local-6989586621680871272"><span class="annot"><span class="annottext">EvBind -&gt; a -&gt; a
</span><a href="#local-6989586621680871272"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871271"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871271"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span id="local-6989586621680871270"><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871270"><span class="hs-identifier hs-var">bs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvBind -&gt; a -&gt; a) -&gt; a -&gt; DVarEnv EvBind -&gt; a
forall a b. (a -&gt; b -&gt; b) -&gt; b -&gt; DVarEnv a -&gt; b
</span><a href="GHC.Types.Var.Env.html#foldDVarEnv"><span class="hs-identifier hs-var">foldDVarEnv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; a -&gt; a
</span><a href="#local-6989586621680871272"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871271"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var hs-var">ev_bind_varenv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871270"><span class="hs-identifier hs-var">bs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-518"></span><span>
</span><span id="line-519"></span><span class="hs-comment">-- See Note [Deterministic UniqFM] to learn about nondeterminism.</span><span>
</span><span id="line-520"></span><span class="hs-comment">-- If you use this please provide a justification why it doesn't introduce</span><span>
</span><span id="line-521"></span><span class="hs-comment">-- nondeterminism.</span><span>
</span><span id="line-522"></span><span id="local-6989586621680871268"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#nonDetStrictFoldEvBindMap"><span class="hs-identifier hs-type">nonDetStrictFoldEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871268"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871268"><span class="hs-identifier hs-type">a</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871268"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621680871268"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-523"></span><span id="nonDetStrictFoldEvBindMap"><span class="annot"><span class="annottext">nonDetStrictFoldEvBindMap :: forall a. (EvBind -&gt; a -&gt; a) -&gt; a -&gt; EvBindMap -&gt; a
</span><a href="GHC.Tc.Types.Evidence.html#nonDetStrictFoldEvBindMap"><span class="hs-identifier hs-var hs-var">nonDetStrictFoldEvBindMap</span></a></span></span><span> </span><span id="local-6989586621680871267"><span class="annot"><span class="annottext">EvBind -&gt; a -&gt; a
</span><a href="#local-6989586621680871267"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span id="local-6989586621680871266"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871266"><span class="hs-identifier hs-var">z</span></a></span></span><span> </span><span id="local-6989586621680871265"><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871265"><span class="hs-identifier hs-var">bs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvBind -&gt; a -&gt; a) -&gt; a -&gt; DVarEnv EvBind -&gt; a
forall a b. (a -&gt; b -&gt; b) -&gt; b -&gt; DVarEnv a -&gt; b
</span><a href="GHC.Types.Var.Env.html#nonDetStrictFoldDVarEnv"><span class="hs-identifier hs-var">nonDetStrictFoldDVarEnv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; a -&gt; a
</span><a href="#local-6989586621680871267"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871266"><span class="hs-identifier hs-var">z</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var hs-var">ev_bind_varenv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871265"><span class="hs-identifier hs-var">bs</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-524"></span><span>
</span><span id="line-525"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#filterEvBindMap"><span class="hs-identifier hs-type">filterEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span>
</span><span id="line-526"></span><span id="filterEvBindMap"><span class="annot"><span class="annottext">filterEvBindMap :: (EvBind -&gt; Bool) -&gt; EvBindMap -&gt; EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#filterEvBindMap"><span class="hs-identifier hs-var hs-var">filterEvBindMap</span></a></span></span><span> </span><span id="local-6989586621680871263"><span class="annot"><span class="annottext">EvBind -&gt; Bool
</span><a href="#local-6989586621680871263"><span class="hs-identifier hs-var">k</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ev_bind_varenv :: EvBindMap -&gt; DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var">ev_bind_varenv</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680871262"><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871262"><span class="hs-identifier hs-var">env</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-527"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBindMap :: DVarEnv EvBind -&gt; EvBindMap
</span><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ev_bind_varenv :: DVarEnv EvBind
</span><a href="GHC.Tc.Types.Evidence.html#ev_bind_varenv"><span class="hs-identifier hs-var">ev_bind_varenv</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvBind -&gt; Bool) -&gt; DVarEnv EvBind -&gt; DVarEnv EvBind
forall a. (a -&gt; Bool) -&gt; DVarEnv a -&gt; DVarEnv a
</span><a href="GHC.Types.Var.Env.html#filterDVarEnv"><span class="hs-identifier hs-var">filterDVarEnv</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; Bool
</span><a href="#local-6989586621680871263"><span class="hs-identifier hs-var">k</span></a></span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871262"><span class="hs-identifier hs-var">env</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-528"></span><span>
</span><span id="line-529"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindMapToVarSet"><span class="hs-identifier hs-type">evBindMapToVarSet</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-530"></span><span id="evBindMapToVarSet"><span class="annot"><span class="annottext">evBindMapToVarSet :: EvBindMap -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evBindMapToVarSet"><span class="hs-identifier hs-var hs-var">evBindMapToVarSet</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span id="local-6989586621680871259"><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871259"><span class="hs-identifier hs-var">dve</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">UniqFM Id Id -&gt; CoVarSet
forall a. UniqFM a a -&gt; UniqSet a
</span><a href="GHC.Types.Unique.Set.html#unsafeUFMToUniqSet"><span class="hs-identifier hs-var">unsafeUFMToUniqSet</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(EvBind -&gt; Id) -&gt; UniqFM Id EvBind -&gt; UniqFM Id Id
forall elt1 elt2 key.
(elt1 -&gt; elt2) -&gt; UniqFM key elt1 -&gt; UniqFM key elt2
</span><a href="GHC.Types.Unique.FM.html#mapUFM"><span class="hs-identifier hs-var">mapUFM</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#evBindVar"><span class="hs-identifier hs-var">evBindVar</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DVarEnv EvBind -&gt; UniqFM Id EvBind
forall key elt. UniqDFM key elt -&gt; UniqFM key elt
</span><a href="GHC.Types.Unique.DFM.html#udfmToUfm"><span class="hs-identifier hs-var">udfmToUfm</span></a></span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871259"><span class="hs-identifier hs-var">dve</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-531"></span><span>
</span><span id="line-532"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#varSetMinusEvBindMap"><span class="hs-identifier hs-type">varSetMinusEvBindMap</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-533"></span><span id="varSetMinusEvBindMap"><span class="annot"><span class="annottext">varSetMinusEvBindMap :: CoVarSet -&gt; EvBindMap -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#varSetMinusEvBindMap"><span class="hs-identifier hs-var hs-var">varSetMinusEvBindMap</span></a></span></span><span> </span><span id="local-6989586621680871255"><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871255"><span class="hs-identifier hs-var">vs</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span id="local-6989586621680871254"><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871254"><span class="hs-identifier hs-var">dve</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871255"><span class="hs-identifier hs-var">vs</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet -&gt; DVarEnv EvBind -&gt; CoVarSet
forall key b. UniqSet key -&gt; UniqDFM key b -&gt; UniqSet key
</span><a href="GHC.Types.Unique.Set.html#uniqSetMinusUDFM"><span class="hs-operator hs-var">`uniqSetMinusUDFM`</span></a></span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871254"><span class="hs-identifier hs-var">dve</span></a></span><span>
</span><span id="line-534"></span><span>
</span><span id="line-535"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680871250"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-536"></span><span>  </span><span id="local-6989586621680871245"><span class="annot"><span class="annottext">ppr :: EvBindMap -&gt; SDoc
</span><a href="#local-6989586621680871245"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span id="local-6989586621680871244"><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871244"><span class="hs-identifier hs-var">m</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">DVarEnv EvBind
</span><a href="#local-6989586621680871244"><span class="hs-identifier hs-var">m</span></a></span><span>
</span><span id="line-537"></span><span>
</span><span id="line-538"></span><span class="hs-comment">-----------------</span><span>
</span><span id="line-539"></span><span class="hs-comment">-- All evidence is bound by EvBinds; no side effects</span><span>
</span><span id="line-540"></span><span class="hs-keyword">data</span><span> </span><span id="EvBind"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-var">EvBind</span></a></span></span><span>
</span><span id="line-541"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvBind"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-var">EvBind</span></a></span></span><span> </span><span class="hs-special">{</span><span> </span><span id="eb_lhs"><span class="annot"><span class="annottext">EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var hs-var">eb_lhs</span></a></span></span><span>      </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span>
</span><span id="line-542"></span><span>           </span><span class="hs-special">,</span><span> </span><span id="eb_rhs"><span class="annot"><span class="annottext">EvBind -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#eb_rhs"><span class="hs-identifier hs-var hs-var">eb_rhs</span></a></span></span><span>      </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-543"></span><span>           </span><span class="hs-special">,</span><span> </span><span id="eb_is_given"><span class="annot"><span class="annottext">EvBind -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#eb_is_given"><span class="hs-identifier hs-var hs-var">eb_is_given</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>  </span><span class="hs-comment">-- True &lt;=&gt; given</span><span>
</span><span id="line-544"></span><span>                 </span><span class="hs-comment">-- See Note [Tracking redundant constraints] in GHC.Tc.Solver</span><span>
</span><span id="line-545"></span><span>    </span><span class="hs-special">}</span><span>
</span><span id="line-546"></span><span>
</span><span id="line-547"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evBindVar"><span class="hs-identifier hs-type">evBindVar</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span>
</span><span id="line-548"></span><span id="evBindVar"><span class="annot"><span class="annottext">evBindVar :: EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#evBindVar"><span class="hs-identifier hs-var hs-var">evBindVar</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var hs-var">eb_lhs</span></a></span><span>
</span><span id="line-549"></span><span>
</span><span id="line-550"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkWantedEvBind"><span class="hs-identifier hs-type">mkWantedEvBind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span>
</span><span id="line-551"></span><span id="mkWantedEvBind"><span class="annot"><span class="annottext">mkWantedEvBind :: Id -&gt; EvTerm -&gt; EvBind
</span><a href="GHC.Tc.Types.Evidence.html#mkWantedEvBind"><span class="hs-identifier hs-var hs-var">mkWantedEvBind</span></a></span></span><span> </span><span id="local-6989586621680871240"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871240"><span class="hs-identifier hs-var">ev</span></a></span></span><span> </span><span id="local-6989586621680871239"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871239"><span class="hs-identifier hs-var">tm</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBind :: Id -&gt; EvTerm -&gt; Bool -&gt; EvBind
</span><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">eb_is_given :: Bool
</span><a href="GHC.Tc.Types.Evidence.html#eb_is_given"><span class="hs-identifier hs-var">eb_is_given</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_lhs :: Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var">eb_lhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871240"><span class="hs-identifier hs-var">ev</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_rhs :: EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#eb_rhs"><span class="hs-identifier hs-var">eb_rhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871239"><span class="hs-identifier hs-var">tm</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-552"></span><span>
</span><span id="line-553"></span><span class="hs-comment">-- EvTypeable are never given, so we can work with EvExpr here instead of EvTerm</span><span>
</span><span id="line-554"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkGivenEvBind"><span class="hs-identifier hs-type">mkGivenEvBind</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span>
</span><span id="line-555"></span><span id="mkGivenEvBind"><span class="annot"><span class="annottext">mkGivenEvBind :: Id -&gt; EvTerm -&gt; EvBind
</span><a href="GHC.Tc.Types.Evidence.html#mkGivenEvBind"><span class="hs-identifier hs-var hs-var">mkGivenEvBind</span></a></span></span><span> </span><span id="local-6989586621680871238"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871238"><span class="hs-identifier hs-var">ev</span></a></span></span><span> </span><span id="local-6989586621680871237"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871237"><span class="hs-identifier hs-var">tm</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBind :: Id -&gt; EvTerm -&gt; Bool -&gt; EvBind
</span><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">eb_is_given :: Bool
</span><a href="GHC.Tc.Types.Evidence.html#eb_is_given"><span class="hs-identifier hs-var">eb_is_given</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_lhs :: Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var">eb_lhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871238"><span class="hs-identifier hs-var">ev</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_rhs :: EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#eb_rhs"><span class="hs-identifier hs-var">eb_rhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871237"><span class="hs-identifier hs-var">tm</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-556"></span><span>
</span><span id="line-557"></span><span>
</span><span id="line-558"></span><span class="hs-comment">-- An EvTerm is, conceptually, a CoreExpr that implements the constraint.</span><span>
</span><span id="line-559"></span><span class="hs-comment">-- Unfortunately, we cannot just do</span><span>
</span><span id="line-560"></span><span class="hs-comment">--   type EvTerm  = CoreExpr</span><span>
</span><span id="line-561"></span><span class="hs-comment">-- Because of staging problems issues around EvTypeable</span><span>
</span><span id="line-562"></span><span class="hs-keyword">data</span><span> </span><span id="EvTerm"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-var">EvTerm</span></a></span></span><span>
</span><span id="line-563"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvExpr"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span>
</span><span id="line-564"></span><span>
</span><span id="line-565"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvTypeable"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-var">EvTypeable</span></a></span></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span><span>   </span><span class="hs-comment">-- Dictionary for (Typeable ty)</span><span>
</span><span id="line-566"></span><span>
</span><span id="line-567"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvFun"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvFun"><span class="hs-identifier hs-var">EvFun</span></a></span></span><span>     </span><span class="hs-comment">-- /\as \ds. let binds in v</span><span>
</span><span id="line-568"></span><span>      </span><span class="hs-special">{</span><span> </span><span id="et_tvs"><span class="annot"><span class="annottext">EvTerm -&gt; [Id]
</span><a href="GHC.Tc.Types.Evidence.html#et_tvs"><span class="hs-identifier hs-var hs-var">et_tvs</span></a></span></span><span>   </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#TyVar"><span class="hs-identifier hs-type">TyVar</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-569"></span><span>      </span><span class="hs-special">,</span><span> </span><span id="et_given"><span class="annot"><span class="annottext">EvTerm -&gt; [Id]
</span><a href="GHC.Tc.Types.Evidence.html#et_given"><span class="hs-identifier hs-var hs-var">et_given</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-570"></span><span>      </span><span class="hs-special">,</span><span> </span><span id="et_binds"><span class="annot"><span class="annottext">EvTerm -&gt; TcEvBinds
</span><a href="GHC.Tc.Types.Evidence.html#et_binds"><span class="hs-identifier hs-var hs-var">et_binds</span></a></span></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span> </span><span class="hs-comment">-- This field is why we need an EvFun</span><span>
</span><span id="line-571"></span><span>                              </span><span class="hs-comment">-- constructor, and can't just use EvExpr</span><span>
</span><span id="line-572"></span><span>      </span><span class="hs-special">,</span><span> </span><span id="et_body"><span class="annot"><span class="annottext">EvTerm -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#et_body"><span class="hs-identifier hs-var hs-var">et_body</span></a></span></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-573"></span><span>
</span><span id="line-574"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621680871183"><span id="local-6989586621680871185"><span id="local-6989586621680871187"><span id="local-6989586621680871189"><span id="local-6989586621680871191"><span id="local-6989586621680871193"><span id="local-6989586621680871195"><span id="local-6989586621680871197"><span id="local-6989586621680871199"><span id="local-6989586621680871201"><span id="local-6989586621680871203"><span id="local-6989586621680871205"><span id="local-6989586621680871215"><span id="local-6989586621680871227"><span class="annot"><span class="annottext">Typeable EvTerm
Typeable EvTerm
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; EvTerm -&gt; c EvTerm)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTerm)
-&gt; (EvTerm -&gt; Constr)
-&gt; (EvTerm -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTerm))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTerm))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; EvTerm -&gt; EvTerm)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm)
-&gt; Data EvTerm
EvTerm -&gt; DataType
EvTerm -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; EvTerm -&gt; EvTerm
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
forall r r'.
(r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTerm
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTerm -&gt; c EvTerm
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTerm)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTerm)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTerm -&gt; m EvTerm
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTerm -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTerm -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvTerm -&gt; EvTerm
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvTerm -&gt; EvTerm
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTerm)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTerm)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTerm)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTerm)
dataTypeOf :: EvTerm -&gt; DataType
$cdataTypeOf :: EvTerm -&gt; DataType
toConstr :: EvTerm -&gt; Constr
$ctoConstr :: EvTerm -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTerm
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTerm
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTerm -&gt; c EvTerm
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTerm -&gt; c EvTerm
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data.Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span>
</span><span id="line-575"></span><span>
</span><span id="line-576"></span><span class="hs-keyword">type</span><span> </span><span id="EvExpr"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Core.html#CoreExpr"><span class="hs-identifier hs-type">CoreExpr</span></a></span><span>
</span><span id="line-577"></span><span>
</span><span id="line-578"></span><span class="hs-comment">-- An EvTerm is (usually) constructed by any of the constructors here</span><span>
</span><span id="line-579"></span><span class="hs-comment">-- and those more complicates ones who were moved to module GHC.Tc.Types.EvTerm</span><span>
</span><span id="line-580"></span><span>
</span><span id="line-581"></span><span class="hs-comment">-- | Any sort of evidence Id, including coercions</span><span>
</span><span id="line-582"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evId"><span class="hs-identifier hs-type">evId</span></a></span><span> </span><span class="hs-glyph">::</span><span>  </span><span class="annot"><a href="GHC.Types.Var.html#EvId"><span class="hs-identifier hs-type">EvId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span>
</span><span id="line-583"></span><span id="evId"><span class="annot"><span class="annottext">evId :: Id -&gt; EvExpr
</span><a href="GHC.Tc.Types.Evidence.html#evId"><span class="hs-identifier hs-var hs-var">evId</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; EvExpr
forall b. Id -&gt; Expr b
</span><a href="GHC.Core.html#Var"><span class="hs-identifier hs-var">Var</span></a></span><span>
</span><span id="line-584"></span><span>
</span><span id="line-585"></span><span class="hs-comment">-- coercion bindings</span><span>
</span><span id="line-586"></span><span class="hs-comment">-- See Note [Coercion evidence terms]</span><span>
</span><span id="line-587"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evCoercion"><span class="hs-identifier hs-type">evCoercion</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-588"></span><span id="evCoercion"><span class="annot"><span class="annottext">evCoercion :: TcCoercionR -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evCoercion"><span class="hs-identifier hs-var hs-var">evCoercion</span></a></span></span><span> </span><span id="local-6989586621680871179"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871179"><span class="hs-identifier hs-var">co</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcCoercionR -&gt; EvExpr
forall b. TcCoercionR -&gt; Expr b
</span><a href="GHC.Core.html#Coercion"><span class="hs-identifier hs-var">Coercion</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871179"><span class="hs-identifier hs-var">co</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-589"></span><span>
</span><span id="line-590"></span><span class="hs-comment">-- | d |&gt; co</span><span>
</span><span id="line-591"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evCast"><span class="hs-identifier hs-type">evCast</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-592"></span><span id="evCast"><span class="annot"><span class="annottext">evCast :: EvExpr -&gt; TcCoercionR -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evCast"><span class="hs-identifier hs-var hs-var">evCast</span></a></span></span><span> </span><span id="local-6989586621680871177"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871177"><span class="hs-identifier hs-var">et</span></a></span></span><span> </span><span id="local-6989586621680871176"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871176"><span class="hs-identifier hs-var">tc</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Core.Coercion.html#isReflCo"><span class="hs-identifier hs-var">isReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871176"><span class="hs-identifier hs-var">tc</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871177"><span class="hs-identifier hs-var">et</span></a></span><span>
</span><span id="line-593"></span><span>             </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvExpr -&gt; TcCoercionR -&gt; EvExpr
forall b. Expr b -&gt; TcCoercionR -&gt; Expr b
</span><a href="GHC.Core.html#Cast"><span class="hs-identifier hs-var">Cast</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871177"><span class="hs-identifier hs-var">et</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871176"><span class="hs-identifier hs-var">tc</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-594"></span><span>
</span><span id="line-595"></span><span class="hs-comment">-- Dictionary instance application</span><span>
</span><span id="line-596"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evDFunApp"><span class="hs-identifier hs-type">evDFunApp</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#DFunId"><span class="hs-identifier hs-type">DFunId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-597"></span><span id="evDFunApp"><span class="annot"><span class="annottext">evDFunApp :: Id -&gt; [Mult] -&gt; [EvExpr] -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evDFunApp"><span class="hs-identifier hs-var hs-var">evDFunApp</span></a></span></span><span> </span><span id="local-6989586621680871173"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871173"><span class="hs-identifier hs-var">df</span></a></span></span><span> </span><span id="local-6989586621680871172"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871172"><span class="hs-identifier hs-var">tys</span></a></span></span><span> </span><span id="local-6989586621680871171"><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871171"><span class="hs-identifier hs-var">ets</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="annot"><span class="annottext">(EvExpr -&gt; EvTerm) -&gt; EvExpr -&gt; EvTerm
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; EvExpr
forall b. Id -&gt; Expr b
</span><a href="GHC.Core.html#Var"><span class="hs-identifier hs-var">Var</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871173"><span class="hs-identifier hs-var">df</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; [Mult] -&gt; EvExpr
forall b. Expr b -&gt; [Mult] -&gt; Expr b
</span><a href="GHC.Core.html#mkTyApps"><span class="hs-operator hs-var">`mkTyApps`</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871172"><span class="hs-identifier hs-var">tys</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; [EvExpr] -&gt; EvExpr
forall b. Expr b -&gt; [Expr b] -&gt; Expr b
</span><a href="GHC.Core.html#mkApps"><span class="hs-operator hs-var">`mkApps`</span></a></span><span> </span><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871171"><span class="hs-identifier hs-var">ets</span></a></span><span>
</span><span id="line-598"></span><span>
</span><span id="line-599"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evDataConApp"><span class="hs-identifier hs-type">evDataConApp</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.DataCon.html#DataCon"><span class="hs-identifier hs-type">DataCon</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-600"></span><span id="evDataConApp"><span class="annot"><span class="annottext">evDataConApp :: DataCon -&gt; [Mult] -&gt; [EvExpr] -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evDataConApp"><span class="hs-identifier hs-var hs-var">evDataConApp</span></a></span></span><span> </span><span id="local-6989586621680871168"><span class="annot"><span class="annottext">DataCon
</span><a href="#local-6989586621680871168"><span class="hs-identifier hs-var">dc</span></a></span></span><span> </span><span id="local-6989586621680871167"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871167"><span class="hs-identifier hs-var">tys</span></a></span></span><span> </span><span id="local-6989586621680871166"><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871166"><span class="hs-identifier hs-var">ets</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; [Mult] -&gt; [EvExpr] -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evDFunApp"><span class="hs-identifier hs-var">evDFunApp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DataCon -&gt; Id
</span><a href="GHC.Core.DataCon.html#dataConWrapId"><span class="hs-identifier hs-var">dataConWrapId</span></a></span><span> </span><span class="annot"><span class="annottext">DataCon
</span><a href="#local-6989586621680871168"><span class="hs-identifier hs-var">dc</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871167"><span class="hs-identifier hs-var">tys</span></a></span><span> </span><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871166"><span class="hs-identifier hs-var">ets</span></a></span><span>
</span><span id="line-601"></span><span>
</span><span id="line-602"></span><span class="hs-comment">-- Selector id plus the types at which it</span><span>
</span><span id="line-603"></span><span class="hs-comment">-- should be instantiated, used for HasField</span><span>
</span><span id="line-604"></span><span class="hs-comment">-- dictionaries; see Note [HasField instances]</span><span>
</span><span id="line-605"></span><span class="hs-comment">-- in TcInterface</span><span>
</span><span id="line-606"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evSelector"><span class="hs-identifier hs-type">evSelector</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span>
</span><span id="line-607"></span><span id="evSelector"><span class="annot"><span class="annottext">evSelector :: Id -&gt; [Mult] -&gt; [EvExpr] -&gt; EvExpr
</span><a href="GHC.Tc.Types.Evidence.html#evSelector"><span class="hs-identifier hs-var hs-var">evSelector</span></a></span></span><span> </span><span id="local-6989586621680871165"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871165"><span class="hs-identifier hs-var">sel_id</span></a></span></span><span> </span><span id="local-6989586621680871164"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871164"><span class="hs-identifier hs-var">tys</span></a></span></span><span> </span><span id="local-6989586621680871163"><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871163"><span class="hs-identifier hs-var">tms</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Id -&gt; EvExpr
forall b. Id -&gt; Expr b
</span><a href="GHC.Core.html#Var"><span class="hs-identifier hs-var">Var</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871165"><span class="hs-identifier hs-var">sel_id</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; [Mult] -&gt; EvExpr
forall b. Expr b -&gt; [Mult] -&gt; Expr b
</span><a href="GHC.Core.html#mkTyApps"><span class="hs-operator hs-var">`mkTyApps`</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871164"><span class="hs-identifier hs-var">tys</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; [EvExpr] -&gt; EvExpr
forall b. Expr b -&gt; [Expr b] -&gt; Expr b
</span><a href="GHC.Core.html#mkApps"><span class="hs-operator hs-var">`mkApps`</span></a></span><span> </span><span class="annot"><span class="annottext">[EvExpr]
</span><a href="#local-6989586621680871163"><span class="hs-identifier hs-var">tms</span></a></span><span>
</span><span id="line-608"></span><span>
</span><span id="line-609"></span><span class="hs-comment">-- Dictionary for (Typeable ty)</span><span>
</span><span id="line-610"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTypeable"><span class="hs-identifier hs-type">evTypeable</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-611"></span><span id="evTypeable"><span class="annot"><span class="annottext">evTypeable :: Mult -&gt; EvTypeable -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evTypeable"><span class="hs-identifier hs-var hs-var">evTypeable</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; EvTypeable -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-var">EvTypeable</span></a></span><span>
</span><span id="line-612"></span><span>
</span><span id="line-613"></span><span class="hs-comment">-- | Instructions on how to make a 'Typeable' dictionary.</span><span>
</span><span id="line-614"></span><span class="hs-comment">-- See Note [Typeable evidence terms]</span><span>
</span><span id="line-615"></span><span class="hs-keyword">data</span><span> </span><span id="EvTypeable"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-var">EvTypeable</span></a></span></span><span>
</span><span id="line-616"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvTypeableTyCon"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyCon"><span class="hs-identifier hs-var">EvTypeableTyCon</span></a></span></span><span> </span><span class="annot"><a href="GHC.Core.TyCon.html#TyCon"><span class="hs-identifier hs-type">TyCon</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-617"></span><span>    </span><span class="hs-comment">-- ^ Dictionary for @Typeable T@ where @T@ is a type constructor with all of</span><span>
</span><span id="line-618"></span><span>    </span><span class="hs-comment">-- its kind variables saturated. The @[EvTerm]@ is @Typeable@ evidence for</span><span>
</span><span id="line-619"></span><span>    </span><span class="hs-comment">-- the applied kinds..</span><span>
</span><span id="line-620"></span><span>
</span><span id="line-621"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvTypeableTyApp"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyApp"><span class="hs-identifier hs-var">EvTypeableTyApp</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-622"></span><span>    </span><span class="hs-comment">-- ^ Dictionary for @Typeable (s t)@,</span><span>
</span><span id="line-623"></span><span>    </span><span class="hs-comment">-- given a dictionaries for @s@ and @t@.</span><span>
</span><span id="line-624"></span><span>
</span><span id="line-625"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvTypeableTrFun"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTrFun"><span class="hs-identifier hs-var">EvTypeableTrFun</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-626"></span><span>    </span><span class="hs-comment">-- ^ Dictionary for @Typeable (s # w -&gt; t)@,</span><span>
</span><span id="line-627"></span><span>    </span><span class="hs-comment">-- given a dictionaries for @w@, @s@, and @t@.</span><span>
</span><span id="line-628"></span><span>
</span><span id="line-629"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvTypeableTyLit"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyLit"><span class="hs-identifier hs-var">EvTypeableTyLit</span></a></span></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-630"></span><span>    </span><span class="hs-comment">-- ^ Dictionary for a type literal,</span><span>
</span><span id="line-631"></span><span>    </span><span class="hs-comment">-- e.g. @Typeable &quot;foo&quot;@ or @Typeable 3@</span><span>
</span><span id="line-632"></span><span>    </span><span class="hs-comment">-- The 'EvTerm' is evidence of, e.g., @KnownNat 3@</span><span>
</span><span id="line-633"></span><span>    </span><span class="hs-comment">-- (see #10348)</span><span>
</span><span id="line-634"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621680871110"><span id="local-6989586621680871112"><span id="local-6989586621680871114"><span id="local-6989586621680871116"><span id="local-6989586621680871118"><span id="local-6989586621680871120"><span id="local-6989586621680871122"><span id="local-6989586621680871124"><span id="local-6989586621680871126"><span id="local-6989586621680871128"><span id="local-6989586621680871130"><span id="local-6989586621680871132"><span id="local-6989586621680871143"><span id="local-6989586621680871155"><span class="annot"><span class="annottext">Typeable EvTypeable
Typeable EvTypeable
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; EvTypeable -&gt; c EvTypeable)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTypeable)
-&gt; (EvTypeable -&gt; Constr)
-&gt; (EvTypeable -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTypeable))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c EvTypeable))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; EvTypeable -&gt; EvTypeable)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable)
-&gt; Data EvTypeable
EvTypeable -&gt; DataType
EvTypeable -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; EvTypeable -&gt; EvTypeable
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTypeable
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTypeable -&gt; c EvTypeable
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTypeable)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTypeable)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvTypeable -&gt; m EvTypeable
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvTypeable -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvTypeable -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvTypeable -&gt; EvTypeable
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvTypeable -&gt; EvTypeable
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTypeable)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c EvTypeable)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTypeable)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvTypeable)
dataTypeOf :: EvTypeable -&gt; DataType
$cdataTypeOf :: EvTypeable -&gt; DataType
toConstr :: EvTypeable -&gt; Constr
$ctoConstr :: EvTypeable -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTypeable
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvTypeable
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTypeable -&gt; c EvTypeable
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvTypeable -&gt; c EvTypeable
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data.Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span>
</span><span id="line-635"></span><span>
</span><span id="line-636"></span><span class="hs-comment">-- | Evidence for @CallStack@ implicit parameters.</span><span>
</span><span id="line-637"></span><span class="hs-keyword">data</span><span> </span><span id="EvCallStack"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCallStack"><span class="hs-identifier hs-var">EvCallStack</span></a></span></span><span>
</span><span id="line-638"></span><span>  </span><span class="hs-comment">-- See Note [Overview of implicit CallStacks]</span><span>
</span><span id="line-639"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="EvCsEmpty"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCsEmpty"><span class="hs-identifier hs-var">EvCsEmpty</span></a></span></span><span>
</span><span id="line-640"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="EvCsPushCall"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCsPushCall"><span class="hs-identifier hs-var">EvCsPushCall</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Name.html#Name"><span class="hs-identifier hs-type">Name</span></a></span><span> </span><span class="annot"><a href="GHC.Types.SrcLoc.html#RealSrcSpan"><span class="hs-identifier hs-type">RealSrcSpan</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span>
</span><span id="line-641"></span><span>    </span><span class="hs-comment">-- ^ @EvCsPushCall name loc stk@ represents a call to @name@, occurring at</span><span>
</span><span id="line-642"></span><span>    </span><span class="hs-comment">-- @loc@, in a calling context @stk@.</span><span>
</span><span id="line-643"></span><span>  </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621680871068"><span id="local-6989586621680871070"><span id="local-6989586621680871072"><span id="local-6989586621680871074"><span id="local-6989586621680871076"><span id="local-6989586621680871078"><span id="local-6989586621680871080"><span id="local-6989586621680871082"><span id="local-6989586621680871084"><span id="local-6989586621680871086"><span id="local-6989586621680871088"><span id="local-6989586621680871090"><span id="local-6989586621680871096"><span id="local-6989586621680871104"><span class="annot"><span class="annottext">Typeable EvCallStack
Typeable EvCallStack
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; EvCallStack -&gt; c EvCallStack)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvCallStack)
-&gt; (EvCallStack -&gt; Constr)
-&gt; (EvCallStack -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvCallStack))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c EvCallStack))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; EvCallStack -&gt; EvCallStack)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack)
-&gt; Data EvCallStack
EvCallStack -&gt; DataType
EvCallStack -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; EvCallStack -&gt; EvCallStack
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvCallStack
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvCallStack -&gt; c EvCallStack
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvCallStack)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c EvCallStack)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; EvCallStack -&gt; m EvCallStack
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; EvCallStack -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; EvCallStack -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvCallStack -&gt; EvCallStack
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; EvCallStack -&gt; EvCallStack
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c EvCallStack)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c EvCallStack)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvCallStack)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c EvCallStack)
dataTypeOf :: EvCallStack -&gt; DataType
$cdataTypeOf :: EvCallStack -&gt; DataType
toConstr :: EvCallStack -&gt; Constr
$ctoConstr :: EvCallStack -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvCallStack
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c EvCallStack
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvCallStack -&gt; c EvCallStack
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; EvCallStack -&gt; c EvCallStack
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data.Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span>
</span><span id="line-644"></span><span>
</span><span id="line-645"></span><span class="hs-comment">{-
Note [Typeable evidence terms]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The EvTypeable data type looks isomorphic to Type, but the EvTerms
inside can be EvIds.  Eg
    f :: forall a. Typeable a =&gt; a -&gt; TypeRep
    f x = typeRep (undefined :: Proxy [a])
Here for the (Typeable [a]) dictionary passed to typeRep we make
evidence
    dl :: Typeable [a] = EvTypeable [a]
                            (EvTypeableTyApp (EvTypeableTyCon []) (EvId d))
where
    d :: Typable a
is the lambda-bound dictionary passed into f.

Note [Coercion evidence terms]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A &quot;coercion evidence term&quot; takes one of these forms
   co_tm ::= EvId v           where v :: t1 ~# t2
           | EvCoercion co
           | EvCast co_tm co

We do quite often need to get a TcCoercion from an EvTerm; see
'evTermCoercion'.

INVARIANT: The evidence for any constraint with type (t1 ~# t2) is
a coercion evidence term.  Consider for example
    [G] d :: F Int a
If we have
    ax7 a :: F Int a ~ (a ~ Bool)
then we do NOT generate the constraint
    [G] (d |&gt; ax7 a) :: a ~ Bool
because that does not satisfy the invariant (d is not a coercion variable).
Instead we make a binding
    g1 :: a~Bool = g |&gt; ax7 a
and the constraint
    [G] g1 :: a~Bool
See #7238 and Note [Bind new Givens immediately] in GHC.Tc.Types.Constraint

Note [EvBinds/EvTerm]
~~~~~~~~~~~~~~~~~~~~~
How evidence is created and updated. Bindings for dictionaries,
and coercions and implicit parameters are carried around in TcEvBinds
which during constraint generation and simplification is always of the
form (TcEvBinds ref). After constraint simplification is finished it
will be transformed to t an (EvBinds ev_bag).

Evidence for coercions *SHOULD* be filled in using the TcEvBinds
However, all EvVars that correspond to *wanted* coercion terms in
an EvBind must be mutable variables so that they can be readily
inlined (by zonking) after constraint simplification is finished.

Conclusion: a new wanted coercion variable should be made mutable.
[Notice though that evidence variables that bind coercion terms
 from super classes will be &quot;given&quot; and hence rigid]


Note [Overview of implicit CallStacks]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(See https://gitlab.haskell.org/ghc/ghc/wikis/explicit-call-stack/implicit-locations)

The goal of CallStack evidence terms is to reify locations
in the program source as runtime values, without any support
from the RTS. We accomplish this by assigning a special meaning
to constraints of type GHC.Stack.Types.HasCallStack, an alias

  type HasCallStack = (?callStack :: CallStack)

Implicit parameters of type GHC.Stack.Types.CallStack (the name is not
important) are solved in three steps:

1. Occurrences of CallStack IPs are solved directly from the given IP,
   just like a regular IP. For example, the occurrence of `?stk` in

     error :: (?stk :: CallStack) =&gt; String -&gt; a
     error s = raise (ErrorCall (s ++ prettyCallStack ?stk))

   will be solved for the `?stk` in `error`s context as before.

2. In a function call, instead of simply passing the given IP, we first
   append the current call-site to it. For example, consider a
   call to the callstack-aware `error` above.

     undefined :: (?stk :: CallStack) =&gt; a
     undefined = error &quot;undefined!&quot;

   Here we want to take the given `?stk` and append the current
   call-site, before passing it to `error`. In essence, we want to
   rewrite `error &quot;undefined!&quot;` to

     let ?stk = pushCallStack &lt;error's location&gt; ?stk
     in error &quot;undefined!&quot;

   We achieve this effect by emitting a NEW wanted

     [W] d :: IP &quot;stk&quot; CallStack

   from which we build the evidence term

     EvCsPushCall &quot;error&quot; &lt;error's location&gt; (EvId d)

   that we use to solve the call to `error`. The new wanted `d` will
   then be solved per rule (1), ie as a regular IP.

   (see GHC.Tc.Solver.Interact.interactDict)

3. We default any insoluble CallStacks to the empty CallStack. Suppose
   `undefined` did not request a CallStack, ie

     undefinedNoStk :: a
     undefinedNoStk = error &quot;undefined!&quot;

   Under the usual IP rules, the new wanted from rule (2) would be
   insoluble as there's no given IP from which to solve it, so we
   would get an &quot;unbound implicit parameter&quot; error.

   We don't ever want to emit an insoluble CallStack IP, so we add a
   defaulting pass to default any remaining wanted CallStacks to the
   empty CallStack with the evidence term

     EvCsEmpty

   (see GHC.Tc.Solver.simpl_top and GHC.Tc.Solver.defaultCallStacks)

This provides a lightweight mechanism for building up call-stacks
explicitly, but is notably limited by the fact that the stack will
stop at the first function whose type does not include a CallStack IP.
For example, using the above definition of `undefined`:

  head :: [a] -&gt; a
  head []    = undefined
  head (x:_) = x

  g = head []

the resulting CallStack will include the call to `undefined` in `head`
and the call to `error` in `undefined`, but *not* the call to `head`
in `g`, because `head` did not explicitly request a CallStack.


Important Details:
- GHC should NEVER report an insoluble CallStack constraint.

- GHC should NEVER infer a CallStack constraint unless one was requested
  with a partial type signature (See TcType.pickQuantifiablePreds).

- A CallStack (defined in GHC.Stack.Types) is a [(String, SrcLoc)],
  where the String is the name of the binder that is used at the
  SrcLoc. SrcLoc is also defined in GHC.Stack.Types and contains the
  package/module/file name, as well as the full source-span. Both
  CallStack and SrcLoc are kept abstract so only GHC can construct new
  values.

- We will automatically solve any wanted CallStack regardless of the
  name of the IP, i.e.

    f = show (?stk :: CallStack)
    g = show (?loc :: CallStack)

  are both valid. However, we will only push new SrcLocs onto existing
  CallStacks when the IP names match, e.g. in

    head :: (?loc :: CallStack) =&gt; [a] -&gt; a
    head [] = error (show (?stk :: CallStack))

  the printed CallStack will NOT include head's call-site. This reflects the
  standard scoping rules of implicit-parameters.

- An EvCallStack term desugars to a CoreExpr of type `IP &quot;some str&quot; CallStack`.
  The desugarer will need to unwrap the IP newtype before pushing a new
  call-site onto a given stack (See GHC.HsToCore.Binds.dsEvCallStack)

- When we emit a new wanted CallStack from rule (2) we set its origin to
  `IPOccOrigin ip_name` instead of the original `OccurrenceOf func`
  (see GHC.Tc.Solver.Interact.interactDict).

  This is a bit shady, but is how we ensure that the new wanted is
  solved like a regular IP.

-}</span><span>
</span><span id="line-825"></span><span>
</span><span id="line-826"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkEvCast"><span class="hs-identifier hs-type">mkEvCast</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span>
</span><span id="line-827"></span><span id="mkEvCast"><span class="annot"><span class="annottext">mkEvCast :: EvExpr -&gt; TcCoercionR -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#mkEvCast"><span class="hs-identifier hs-var hs-var">mkEvCast</span></a></span></span><span> </span><span id="local-6989586621680871067"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871067"><span class="hs-identifier hs-var">ev</span></a></span></span><span> </span><span id="local-6989586621680871066"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871066"><span class="hs-identifier hs-var">lco</span></a></span></span><span>
</span><span id="line-828"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="hs-identifier">ASSERT2</span><span class="hs-special">(</span><span> </span><span class="hs-identifier">tcCoercionRole</span><span> </span><span class="hs-identifier">lco</span><span> </span><span class="hs-operator">==</span><span> </span><span class="hs-identifier">Representational</span><span>
</span><span id="line-829"></span><span>           </span><span class="hs-special">,</span><span> </span><span class="hs-special">(</span><span class="hs-identifier">vcat</span><span> </span><span class="hs-special">[</span><span class="hs-identifier">text</span><span> </span><span class="hs-string">&quot;Coercion of wrong role passed to mkEvCast:&quot;</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">ppr</span><span> </span><span class="hs-identifier">ev</span><span class="hs-special">,</span><span> </span><span class="hs-identifier">ppr</span><span> </span><span class="hs-identifier">lco</span><span class="hs-special">]</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-830"></span><span>    </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isTcReflCo"><span class="hs-identifier hs-var">isTcReflCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871066"><span class="hs-identifier hs-var">lco</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-var">EvExpr</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871067"><span class="hs-identifier hs-var">ev</span></a></span><span>
</span><span id="line-831"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; TcCoercionR -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#evCast"><span class="hs-identifier hs-var">evCast</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871067"><span class="hs-identifier hs-var">ev</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871066"><span class="hs-identifier hs-var">lco</span></a></span><span>
</span><span id="line-832"></span><span>
</span><span id="line-833"></span><span>
</span><span id="line-834"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#mkEvScSelectors"><span class="hs-identifier hs-type">mkEvScSelectors</span></a></span><span>         </span><span class="hs-comment">-- Assume   class (..., D ty, ...) =&gt; C a b</span><span>
</span><span id="line-835"></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.Class.html#Class"><span class="hs-identifier hs-type">Class</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcType"><span class="hs-identifier hs-type">TcType</span></a></span><span class="hs-special">]</span><span>  </span><span class="hs-comment">-- C ty1 ty2</span><span>
</span><span id="line-836"></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Utils.TcType.html#TcPredType"><span class="hs-identifier hs-type">TcPredType</span></a></span><span class="hs-special">,</span><span>      </span><span class="hs-comment">-- D ty[ty1/a,ty2/b]</span><span>
</span><span id="line-837"></span><span>       </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span class="hs-special">)</span><span>          </span><span class="hs-comment">-- :: C ty1 ty2 -&gt; D ty[ty1/a,ty2/b]</span><span>
</span><span id="line-838"></span><span>     </span><span class="hs-special">]</span><span>
</span><span id="line-839"></span><span id="mkEvScSelectors"><span class="annot"><span class="annottext">mkEvScSelectors :: Class -&gt; [Mult] -&gt; [(Mult, EvExpr)]
</span><a href="GHC.Tc.Types.Evidence.html#mkEvScSelectors"><span class="hs-identifier hs-var hs-var">mkEvScSelectors</span></a></span></span><span> </span><span id="local-6989586621680871062"><span class="annot"><span class="annottext">Class
</span><a href="#local-6989586621680871062"><span class="hs-identifier hs-var">cls</span></a></span></span><span> </span><span id="local-6989586621680871061"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871061"><span class="hs-identifier hs-var">tys</span></a></span></span><span>
</span><span id="line-840"></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Mult -&gt; Int -&gt; (Mult, EvExpr))
-&gt; [Mult] -&gt; [Int] -&gt; [(Mult, EvExpr)]
forall a b c. (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
</span><a href="../../base/src/GHC.List.html#zipWith"><span class="hs-identifier hs-var">zipWith</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; Int -&gt; (Mult, EvExpr)
forall {a} {b}. a -&gt; Int -&gt; (a, Expr b)
</span><a href="#local-6989586621680871059"><span class="hs-identifier hs-var">mk_pr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Class -&gt; [Mult] -&gt; [Mult]
</span><a href="GHC.Tc.Utils.TcType.html#immSuperClasses"><span class="hs-identifier hs-var">immSuperClasses</span></a></span><span> </span><span class="annot"><span class="annottext">Class
</span><a href="#local-6989586621680871062"><span class="hs-identifier hs-var">cls</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871061"><span class="hs-identifier hs-var">tys</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-glyph">..</span><span class="hs-special">]</span><span>
</span><span id="line-841"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-842"></span><span>    </span><span id="local-6989586621680871059"><span class="annot"><span class="annottext">mk_pr :: a -&gt; Int -&gt; (a, Expr b)
</span><a href="#local-6989586621680871059"><span class="hs-identifier hs-var hs-var">mk_pr</span></a></span></span><span> </span><span id="local-6989586621680871057"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871057"><span class="hs-identifier hs-var">pred</span></a></span></span><span> </span><span id="local-6989586621680871056"><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621680871056"><span class="hs-identifier hs-var">i</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621680871057"><span class="hs-identifier hs-var">pred</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Id -&gt; Expr b
forall b. Id -&gt; Expr b
</span><a href="GHC.Core.html#Var"><span class="hs-identifier hs-var">Var</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871055"><span class="hs-identifier hs-var">sc_sel_id</span></a></span><span> </span><span class="annot"><span class="annottext">Expr b -&gt; [Mult] -&gt; Expr b
forall b. Expr b -&gt; [Mult] -&gt; Expr b
</span><a href="GHC.Core.html#mkTyApps"><span class="hs-operator hs-var">`mkTyApps`</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680871061"><span class="hs-identifier hs-var">tys</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-843"></span><span>      </span><span class="hs-keyword">where</span><span>
</span><span id="line-844"></span><span>        </span><span id="local-6989586621680871055"><span class="annot"><span class="annottext">sc_sel_id :: Id
</span><a href="#local-6989586621680871055"><span class="hs-identifier hs-var hs-var">sc_sel_id</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Class -&gt; Int -&gt; Id
</span><a href="GHC.Core.Class.html#classSCSelId"><span class="hs-identifier hs-var">classSCSelId</span></a></span><span> </span><span class="annot"><span class="annottext">Class
</span><a href="#local-6989586621680871062"><span class="hs-identifier hs-var">cls</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621680871056"><span class="hs-identifier hs-var">i</span></a></span><span> </span><span class="hs-comment">-- Zero-indexed</span><span>
</span><span id="line-845"></span><span>
</span><span id="line-846"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#emptyTcEvBinds"><span class="hs-identifier hs-type">emptyTcEvBinds</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span>
</span><span id="line-847"></span><span id="emptyTcEvBinds"><span class="annot"><span class="annottext">emptyTcEvBinds :: TcEvBinds
</span><a href="GHC.Tc.Types.Evidence.html#emptyTcEvBinds"><span class="hs-identifier hs-var hs-var">emptyTcEvBinds</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag EvBind -&gt; TcEvBinds
</span><a href="GHC.Tc.Types.Evidence.html#EvBinds"><span class="hs-identifier hs-var">EvBinds</span></a></span><span> </span><span class="annot"><span class="annottext">Bag EvBind
forall a. Bag a
</span><a href="GHC.Data.Bag.html#emptyBag"><span class="hs-identifier hs-var">emptyBag</span></a></span><span>
</span><span id="line-848"></span><span>
</span><span id="line-849"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isEmptyTcEvBinds"><span class="hs-identifier hs-type">isEmptyTcEvBinds</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span>
</span><span id="line-850"></span><span id="isEmptyTcEvBinds"><span class="annot"><span class="annottext">isEmptyTcEvBinds :: TcEvBinds -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#isEmptyTcEvBinds"><span class="hs-identifier hs-var hs-var">isEmptyTcEvBinds</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBinds"><span class="hs-identifier hs-type">EvBinds</span></a></span><span> </span><span id="local-6989586621680871054"><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680871054"><span class="hs-identifier hs-var">b</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bag EvBind -&gt; Bool
forall a. Bag a -&gt; Bool
</span><a href="GHC.Data.Bag.html#isEmptyBag"><span class="hs-identifier hs-var">isEmptyBag</span></a></span><span> </span><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680871054"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-851"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#isEmptyTcEvBinds"><span class="hs-identifier hs-var">isEmptyTcEvBinds</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; Bool
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;isEmptyTcEvBinds&quot;</span></span><span>
</span><span id="line-852"></span><span>
</span><span id="line-853"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTermCoercion_maybe"><span class="hs-identifier hs-type">evTermCoercion_maybe</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-854"></span><span class="hs-comment">-- Applied only to EvTerms of type (s~t)</span><span>
</span><span id="line-855"></span><span class="hs-comment">-- See Note [Coercion evidence terms]</span><span>
</span><span id="line-856"></span><span id="evTermCoercion_maybe"><span class="annot"><span class="annottext">evTermCoercion_maybe :: EvTerm -&gt; Maybe TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#evTermCoercion_maybe"><span class="hs-identifier hs-var hs-var">evTermCoercion_maybe</span></a></span></span><span> </span><span id="local-6989586621680871052"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871052"><span class="hs-identifier hs-var">ev_term</span></a></span></span><span>
</span><span id="line-857"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span id="local-6989586621680871051"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871051"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871052"><span class="hs-identifier hs-var">ev_term</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; Maybe TcCoercionR
</span><a href="#local-6989586621680871050"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871051"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-858"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe TcCoercionR
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-859"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-860"></span><span>    </span><span class="annot"><a href="#local-6989586621680871050"><span class="hs-identifier hs-type">go</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-861"></span><span>    </span><span id="local-6989586621680871050"><span class="annot"><span class="annottext">go :: EvExpr -&gt; Maybe TcCoercionR
</span><a href="#local-6989586621680871050"><span class="hs-identifier hs-var hs-var">go</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span id="local-6989586621680871049"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871049"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">)</span><span>       </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Maybe TcCoercionR
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Id -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkCoVarCo"><span class="hs-identifier hs-var">mkCoVarCo</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871049"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-862"></span><span>    </span><span class="annot"><a href="#local-6989586621680871050"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.html#Coercion"><span class="hs-identifier hs-type">Coercion</span></a></span><span> </span><span id="local-6989586621680871048"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871048"><span class="hs-identifier hs-var">co</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Maybe TcCoercionR
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871048"><span class="hs-identifier hs-var">co</span></a></span><span>
</span><span id="line-863"></span><span>    </span><span class="annot"><a href="#local-6989586621680871050"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.html#Cast"><span class="hs-identifier hs-type">Cast</span></a></span><span> </span><span id="local-6989586621680871047"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871047"><span class="hs-identifier hs-var">tm</span></a></span></span><span> </span><span id="local-6989586621680871046"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871046"><span class="hs-identifier hs-var">co</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span class="hs-special">{</span><span> </span><span id="local-6989586621680871045"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871045"><span class="hs-identifier hs-var">co'</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; Maybe TcCoercionR
</span><a href="#local-6989586621680871050"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871047"><span class="hs-identifier hs-var">tm</span></a></span><span>
</span><span id="line-864"></span><span>                          </span><span class="hs-special">;</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; Maybe TcCoercionR
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkCoCast"><span class="hs-identifier hs-var">mkCoCast</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871045"><span class="hs-identifier hs-var">co'</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871046"><span class="hs-identifier hs-var">co</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-865"></span><span>    </span><span class="annot"><a href="#local-6989586621680871050"><span class="hs-identifier hs-var">go</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><span class="hs-identifier">_</span></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Maybe TcCoercionR
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>
</span><span id="line-866"></span><span>
</span><span id="line-867"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evTermCoercion"><span class="hs-identifier hs-type">evTermCoercion</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcCoercion"><span class="hs-identifier hs-type">TcCoercion</span></a></span><span>
</span><span id="line-868"></span><span id="evTermCoercion"><span class="annot"><span class="annottext">evTermCoercion :: EvTerm -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#evTermCoercion"><span class="hs-identifier hs-var hs-var">evTermCoercion</span></a></span></span><span> </span><span id="local-6989586621680871043"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871043"><span class="hs-identifier hs-var">tm</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; Maybe TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#evTermCoercion_maybe"><span class="hs-identifier hs-var">evTermCoercion_maybe</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871043"><span class="hs-identifier hs-var">tm</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-869"></span><span>                      </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621680871042"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871042"><span class="hs-identifier hs-var">co</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680871042"><span class="hs-identifier hs-var">co</span></a></span><span>
</span><span id="line-870"></span><span>                      </span><span class="annot"><span class="annottext">Maybe TcCoercionR
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; TcCoercionR
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;evTermCoercion&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871043"><span class="hs-identifier hs-var">tm</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-871"></span><span>
</span><span id="line-872"></span><span>
</span><span id="line-873"></span><span class="hs-comment">{- *********************************************************************
*                                                                      *
                  Free variables
*                                                                      *
********************************************************************* -}</span><span>
</span><span id="line-878"></span><span>
</span><span id="line-879"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#findNeededEvVars"><span class="hs-identifier hs-type">findNeededEvVars</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindMap"><span class="hs-identifier hs-type">EvBindMap</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-880"></span><span class="hs-comment">-- Find all the Given evidence needed by seeds,</span><span>
</span><span id="line-881"></span><span class="hs-comment">-- looking transitively through binds</span><span>
</span><span id="line-882"></span><span id="findNeededEvVars"><span class="annot"><span class="annottext">findNeededEvVars :: EvBindMap -&gt; CoVarSet -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#findNeededEvVars"><span class="hs-identifier hs-var hs-var">findNeededEvVars</span></a></span></span><span> </span><span id="local-6989586621680871040"><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871040"><span class="hs-identifier hs-var">ev_binds</span></a></span></span><span> </span><span id="local-6989586621680871039"><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871039"><span class="hs-identifier hs-var">seeds</span></a></span></span><span>
</span><span id="line-883"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(CoVarSet -&gt; CoVarSet) -&gt; CoVarSet -&gt; CoVarSet
</span><a href="GHC.Types.Var.Set.html#transCloVarSet"><span class="hs-identifier hs-var">transCloVarSet</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet -&gt; CoVarSet
</span><a href="#local-6989586621680871037"><span class="hs-identifier hs-var">also_needs</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871039"><span class="hs-identifier hs-var">seeds</span></a></span><span>
</span><span id="line-884"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-885"></span><span>   </span><span class="annot"><a href="#local-6989586621680871037"><span class="hs-identifier hs-type">also_needs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-886"></span><span>   </span><span id="local-6989586621680871037"><span class="annot"><span class="annottext">also_needs :: CoVarSet -&gt; CoVarSet
</span><a href="#local-6989586621680871037"><span class="hs-identifier hs-var hs-var">also_needs</span></a></span></span><span> </span><span id="local-6989586621680871036"><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871036"><span class="hs-identifier hs-var">needs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Id -&gt; CoVarSet -&gt; CoVarSet) -&gt; CoVarSet -&gt; CoVarSet -&gt; CoVarSet
forall elt a. (elt -&gt; a -&gt; a) -&gt; a -&gt; UniqSet elt -&gt; a
</span><a href="GHC.Types.Unique.Set.html#nonDetStrictFoldUniqSet"><span class="hs-identifier hs-var">nonDetStrictFoldUniqSet</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; CoVarSet -&gt; CoVarSet
</span><a href="#local-6989586621680871034"><span class="hs-identifier hs-var">add</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="GHC.Types.Var.Set.html#emptyVarSet"><span class="hs-identifier hs-var">emptyVarSet</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871036"><span class="hs-identifier hs-var">needs</span></a></span><span>
</span><span id="line-887"></span><span>     </span><span class="hs-comment">-- It's OK to use a non-deterministic fold here because we immediately</span><span>
</span><span id="line-888"></span><span>     </span><span class="hs-comment">-- forget about the ordering by creating a set</span><span>
</span><span id="line-889"></span><span>
</span><span id="line-890"></span><span>   </span><span class="annot"><a href="#local-6989586621680871034"><span class="hs-identifier hs-type">add</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Var"><span class="hs-identifier hs-type">Var</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-891"></span><span>   </span><span id="local-6989586621680871034"><span class="annot"><span class="annottext">add :: Id -&gt; CoVarSet -&gt; CoVarSet
</span><a href="#local-6989586621680871034"><span class="hs-identifier hs-var hs-var">add</span></a></span></span><span> </span><span id="local-6989586621680871032"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871032"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span id="local-6989586621680871031"><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871031"><span class="hs-identifier hs-var">needs</span></a></span></span><span>
</span><span id="line-892"></span><span>     </span><span class="hs-glyph">|</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span id="local-6989586621680871030"><span class="annot"><span class="annottext">EvBind
</span><a href="#local-6989586621680871030"><span class="hs-identifier hs-var">ev_bind</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">EvBindMap -&gt; Id -&gt; Maybe EvBind
</span><a href="GHC.Tc.Types.Evidence.html#lookupEvBind"><span class="hs-identifier hs-var">lookupEvBind</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindMap
</span><a href="#local-6989586621680871040"><span class="hs-identifier hs-var">ev_binds</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680871032"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-893"></span><span>     </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">eb_is_given :: EvBind -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#eb_is_given"><span class="hs-identifier hs-var">eb_is_given</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680871029"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680871029"><span class="hs-identifier hs-var">is_given</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_rhs :: EvBind -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#eb_rhs"><span class="hs-identifier hs-var">eb_rhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680871028"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871028"><span class="hs-identifier hs-var">rhs</span></a></span></span><span> </span><span class="hs-special">}</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">EvBind
</span><a href="#local-6989586621680871030"><span class="hs-identifier hs-var">ev_bind</span></a></span><span>
</span><span id="line-894"></span><span>     </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680871029"><span class="hs-identifier hs-var">is_given</span></a></span><span>
</span><span id="line-895"></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871028"><span class="hs-identifier hs-var">rhs</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet -&gt; CoVarSet -&gt; CoVarSet
</span><a href="GHC.Types.Var.Set.html#unionVarSet"><span class="hs-operator hs-var">`unionVarSet`</span></a></span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871031"><span class="hs-identifier hs-var">needs</span></a></span><span>
</span><span id="line-896"></span><span>     </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span>
</span><span id="line-897"></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="#local-6989586621680871031"><span class="hs-identifier hs-var">needs</span></a></span><span>
</span><span id="line-898"></span><span>
</span><span id="line-899"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-type">evVarsOfTerm</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-900"></span><span id="evVarsOfTerm"><span class="annot"><span class="annottext">evVarsOfTerm :: EvTerm -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var hs-var">evVarsOfTerm</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span id="local-6989586621680871026"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871026"><span class="hs-identifier hs-var">e</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InterestingVarFun -&gt; EvExpr -&gt; CoVarSet
</span><a href="GHC.Core.FVs.html#exprSomeFreeVars"><span class="hs-identifier hs-var">exprSomeFreeVars</span></a></span><span> </span><span class="annot"><span class="annottext">InterestingVarFun
</span><a href="GHC.Core.Predicate.html#isEvVar"><span class="hs-identifier hs-var">isEvVar</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680871026"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-901"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680871024"><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680871024"><span class="hs-identifier hs-var">ev</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvTypeable -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTypeable"><span class="hs-identifier hs-var">evVarsOfTypeable</span></a></span><span> </span><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680871024"><span class="hs-identifier hs-var">ev</span></a></span><span>
</span><span id="line-902"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvFun"><span class="hs-identifier hs-type">EvFun</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CoVarSet
</span><a href="GHC.Types.Var.Set.html#emptyVarSet"><span class="hs-identifier hs-var">emptyVarSet</span></a></span><span> </span><span class="hs-comment">-- See Note [Free vars of EvFun]</span><span>
</span><span id="line-903"></span><span>
</span><span id="line-904"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerms"><span class="hs-identifier hs-type">evVarsOfTerms</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-905"></span><span id="evVarsOfTerms"><span class="annot"><span class="annottext">evVarsOfTerms :: [EvTerm] -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerms"><span class="hs-identifier hs-var hs-var">evVarsOfTerms</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(EvTerm -&gt; CoVarSet) -&gt; [EvTerm] -&gt; CoVarSet
forall a. (a -&gt; CoVarSet) -&gt; [a] -&gt; CoVarSet
</span><a href="GHC.Types.Var.Set.html#mapUnionVarSet"><span class="hs-identifier hs-var">mapUnionVarSet</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span>
</span><span id="line-906"></span><span>
</span><span id="line-907"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#evVarsOfTypeable"><span class="hs-identifier hs-type">evVarsOfTypeable</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Var.Set.html#VarSet"><span class="hs-identifier hs-type">VarSet</span></a></span><span>
</span><span id="line-908"></span><span id="evVarsOfTypeable"><span class="annot"><span class="annottext">evVarsOfTypeable :: EvTypeable -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTypeable"><span class="hs-identifier hs-var hs-var">evVarsOfTypeable</span></a></span></span><span> </span><span id="local-6989586621680871020"><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680871020"><span class="hs-identifier hs-var">ev</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-909"></span><span>  </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680871020"><span class="hs-identifier hs-var">ev</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-910"></span><span>    </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyCon"><span class="hs-identifier hs-type">EvTypeableTyCon</span></a></span><span> </span><span class="annot"><span class="annottext">TyCon
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680871019"><span class="annot"><span class="annottext">[EvTerm]
</span><a href="#local-6989586621680871019"><span class="hs-identifier hs-var">e</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(EvTerm -&gt; CoVarSet) -&gt; [EvTerm] -&gt; CoVarSet
forall a. (a -&gt; CoVarSet) -&gt; [a] -&gt; CoVarSet
</span><a href="GHC.Types.Var.Set.html#mapUnionVarSet"><span class="hs-identifier hs-var">mapUnionVarSet</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span> </span><span class="annot"><span class="annottext">[EvTerm]
</span><a href="#local-6989586621680871019"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-911"></span><span>    </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyApp"><span class="hs-identifier hs-type">EvTypeableTyApp</span></a></span><span> </span><span id="local-6989586621680871018"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871018"><span class="hs-identifier hs-var">e1</span></a></span></span><span> </span><span id="local-6989586621680871017"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871017"><span class="hs-identifier hs-var">e2</span></a></span></span><span>    </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[EvTerm] -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerms"><span class="hs-identifier hs-var">evVarsOfTerms</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871018"><span class="hs-identifier hs-var">e1</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871017"><span class="hs-identifier hs-var">e2</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-912"></span><span>    </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTrFun"><span class="hs-identifier hs-type">EvTypeableTrFun</span></a></span><span> </span><span id="local-6989586621680871016"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871016"><span class="hs-identifier hs-var">em</span></a></span></span><span> </span><span id="local-6989586621680871015"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871015"><span class="hs-identifier hs-var">e1</span></a></span></span><span> </span><span id="local-6989586621680871014"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871014"><span class="hs-identifier hs-var">e2</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">[EvTerm] -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerms"><span class="hs-identifier hs-var">evVarsOfTerms</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871016"><span class="hs-identifier hs-var">em</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871015"><span class="hs-identifier hs-var">e1</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871014"><span class="hs-identifier hs-var">e2</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-913"></span><span>    </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyLit"><span class="hs-identifier hs-type">EvTypeableTyLit</span></a></span><span> </span><span id="local-6989586621680871013"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871013"><span class="hs-identifier hs-var">e</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; CoVarSet
</span><a href="GHC.Tc.Types.Evidence.html#evVarsOfTerm"><span class="hs-identifier hs-var">evVarsOfTerm</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680871013"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-914"></span><span>
</span><span id="line-915"></span><span>
</span><span id="line-916"></span><span class="hs-comment">{- Note [Free vars of EvFun]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Finding the free vars of an EvFun is made tricky by the fact the
bindings et_binds may be a mutable variable.  Fortunately, we
can just squeeze by.  Here's how.

* evVarsOfTerm is used only by GHC.Tc.Solver.neededEvVars.
* Each EvBindsVar in an et_binds field of an EvFun is /also/ in the
  ic_binds field of an Implication
* So we can track usage via the processing for that implication,
  (see Note [Tracking redundant constraints] in GHC.Tc.Solver).
  We can ignore usage from the EvFun altogether.

************************************************************************
*                                                                      *
                  Pretty printing
*                                                                      *
************************************************************************
-}</span><span>
</span><span id="line-935"></span><span>
</span><span id="line-936"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680871010"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-937"></span><span>  </span><span id="local-6989586621680871009"><span class="annot"><span class="annottext">ppr :: HsWrapper -&gt; SDoc
</span><a href="#local-6989586621680871009"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span id="local-6989586621680871008"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871008"><span class="hs-identifier hs-var">co_fn</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; (Bool -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprHsWrapper"><span class="hs-identifier hs-var">pprHsWrapper</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871008"><span class="hs-identifier hs-var">co_fn</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#no_parens"><span class="hs-identifier hs-var">no_parens</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;&lt;&gt;&quot;</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-938"></span><span>
</span><span id="line-939"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#pprHsWrapper"><span class="hs-identifier hs-type">pprHsWrapper</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-940"></span><span class="hs-comment">-- With -fprint-typechecker-elaboration, print the wrapper</span><span>
</span><span id="line-941"></span><span class="hs-comment">--   otherwise just print what's inside</span><span>
</span><span id="line-942"></span><span class="hs-comment">-- The pp_thing_inside function takes Bool to say whether</span><span>
</span><span id="line-943"></span><span class="hs-comment">--    it's in a position that needs parens for a non-atomic thing</span><span>
</span><span id="line-944"></span><span id="pprHsWrapper"><span class="annot"><span class="annottext">pprHsWrapper :: HsWrapper -&gt; (Bool -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprHsWrapper"><span class="hs-identifier hs-var hs-var">pprHsWrapper</span></a></span></span><span> </span><span id="local-6989586621680871006"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871006"><span class="hs-identifier hs-var">wrap</span></a></span></span><span> </span><span id="local-6989586621680871005"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871005"><span class="hs-identifier hs-var">pp_thing_inside</span></a></span></span><span>
</span><span id="line-945"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(SDocContext -&gt; Bool) -&gt; (Bool -&gt; SDoc) -&gt; SDoc
forall a. (SDocContext -&gt; a) -&gt; (a -&gt; SDoc) -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sdocOption"><span class="hs-identifier hs-var">sdocOption</span></a></span><span> </span><span class="annot"><span class="annottext">SDocContext -&gt; Bool
</span><a href="GHC.Utils.Outputable.html#sdocPrintTypecheckerElaboration"><span class="hs-identifier hs-var hs-var">sdocPrintTypecheckerElaboration</span></a></span><span> </span><span class="annot"><span class="annottext">((Bool -&gt; SDoc) -&gt; SDoc) -&gt; (Bool -&gt; SDoc) -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-glyph">\</span><span class="hs-glyph">case</span><span>
</span><span id="line-946"></span><span>      </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871005"><span class="hs-identifier hs-var">pp_thing_inside</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680871006"><span class="hs-identifier hs-var">wrap</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-947"></span><span>      </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871005"><span class="hs-identifier hs-var">pp_thing_inside</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-948"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-949"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-type">help</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-950"></span><span>    </span><span class="hs-comment">-- True  &lt;=&gt; appears in function application position</span><span>
</span><span id="line-951"></span><span>    </span><span class="hs-comment">-- False &lt;=&gt; appears as body of let or lambda</span><span>
</span><span id="line-952"></span><span>    </span><span id="local-6989586621680871002"><span class="annot"><span class="annottext">help :: (Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var hs-var">help</span></a></span></span><span> </span><span id="local-6989586621680871001"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871001"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#WpHole"><span class="hs-identifier hs-var">WpHole</span></a></span><span>             </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871001"><span class="hs-identifier hs-var">it</span></a></span><span>
</span><span id="line-953"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680871000"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871000"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCompose"><span class="hs-identifier hs-type">WpCompose</span></a></span><span> </span><span id="local-6989586621680870999"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870999"><span class="hs-identifier hs-var">f1</span></a></span></span><span> </span><span id="local-6989586621680870998"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870998"><span class="hs-identifier hs-var">f2</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680871000"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870998"><span class="hs-identifier hs-var">f2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870999"><span class="hs-identifier hs-var">f1</span></a></span><span>
</span><span id="line-954"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870997"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870997"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpFun"><span class="hs-identifier hs-type">WpFun</span></a></span><span> </span><span id="local-6989586621680870996"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870996"><span class="hs-identifier hs-var">f1</span></a></span></span><span> </span><span id="local-6989586621680870995"><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870995"><span class="hs-identifier hs-var">f2</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Scaled"><span class="hs-identifier hs-type">Scaled</span></a></span><span> </span><span id="local-6989586621680870994"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870994"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span id="local-6989586621680870993"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870993"><span class="hs-identifier hs-var">t1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;\\(x&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dcolon"><span class="hs-identifier hs-var">dcolon</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#brackets"><span class="hs-identifier hs-var">brackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870994"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870993"><span class="hs-identifier hs-var">t1</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;).&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span>
</span><span id="line-955"></span><span>                                              </span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870997"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">(Bool -&gt; SDoc) -&gt; HsWrapper -&gt; Bool -&gt; SDoc
</span><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;x&quot;</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870996"><span class="hs-identifier hs-var">f1</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">HsWrapper
</span><a href="#local-6989586621680870995"><span class="hs-identifier hs-var">f2</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>
</span><span id="line-956"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870987"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870987"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpCast"><span class="hs-identifier hs-type">WpCast</span></a></span><span> </span><span id="local-6989586621680870986"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680870986"><span class="hs-identifier hs-var">co</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870987"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#nest"><span class="hs-identifier hs-var">nest</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;|&gt;&quot;</span></span><span>
</span><span id="line-957"></span><span>                                              </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; SDoc
</span><a href="GHC.Core.TyCo.Ppr.html#pprParendCo"><span class="hs-identifier hs-var">pprParendCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680870986"><span class="hs-identifier hs-var">co</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-958"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870982"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870982"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvApp"><span class="hs-identifier hs-type">WpEvApp</span></a></span><span> </span><span id="local-6989586621680870981"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870981"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#no_parens"><span class="hs-identifier hs-var">no_parens</span></a></span><span>  </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870982"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#nest"><span class="hs-identifier hs-var">nest</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870981"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-959"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870980"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870980"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyApp"><span class="hs-identifier hs-type">WpTyApp</span></a></span><span> </span><span id="local-6989586621680870979"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870979"><span class="hs-identifier hs-var">ty</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#no_parens"><span class="hs-identifier hs-var">no_parens</span></a></span><span>  </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870980"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;@&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
</span><a href="GHC.Core.TyCo.Ppr.html#pprParendType"><span class="hs-identifier hs-var">pprParendType</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870979"><span class="hs-identifier hs-var">ty</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-960"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870977"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870977"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpEvLam"><span class="hs-identifier hs-type">WpEvLam</span></a></span><span> </span><span id="local-6989586621680870976"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870976"><span class="hs-identifier hs-var">id</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;\\&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprLamBndr"><span class="hs-identifier hs-var">pprLamBndr</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870976"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dot"><span class="hs-identifier hs-var">dot</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870977"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">]</span><span>
</span><span id="line-961"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870973"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870973"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpTyLam"><span class="hs-identifier hs-type">WpTyLam</span></a></span><span> </span><span id="local-6989586621680870972"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870972"><span class="hs-identifier hs-var">tv</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;/\\&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprLamBndr"><span class="hs-identifier hs-var">pprLamBndr</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870972"><span class="hs-identifier hs-var">tv</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dot"><span class="hs-identifier hs-var">dot</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870973"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">]</span><span>
</span><span id="line-962"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870971"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870971"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpLet"><span class="hs-identifier hs-type">WpLet</span></a></span><span> </span><span id="local-6989586621680870970"><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680870970"><span class="hs-identifier hs-var">binds</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;let&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#braces"><span class="hs-identifier hs-var">braces</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcEvBinds -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680870970"><span class="hs-identifier hs-var">binds</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870971"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">]</span><span>
</span><span id="line-963"></span><span>    </span><span class="annot"><a href="#local-6989586621680871002"><span class="hs-identifier hs-var">help</span></a></span><span> </span><span id="local-6989586621680870968"><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870968"><span class="hs-identifier hs-var">it</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#WpMultCoercion"><span class="hs-identifier hs-type">WpMultCoercion</span></a></span><span> </span><span id="local-6989586621680870967"><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680870967"><span class="hs-identifier hs-var">co</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; Bool -&gt; SDoc) -&gt; SDoc -&gt; Bool -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Bool -&gt; SDoc
</span><a href="#local-6989586621680870968"><span class="hs-identifier hs-var">it</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#nest"><span class="hs-identifier hs-var">nest</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;&lt;multiplicity coercion&gt;&quot;</span></span><span>
</span><span id="line-964"></span><span>                                              </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; SDoc
</span><a href="GHC.Core.TyCo.Ppr.html#pprParendCo"><span class="hs-identifier hs-var">pprParendCo</span></a></span><span> </span><span class="annot"><span class="annottext">TcCoercionR
</span><a href="#local-6989586621680870967"><span class="hs-identifier hs-var">co</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-965"></span><span>
</span><span id="line-966"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#pprLamBndr"><span class="hs-identifier hs-type">pprLamBndr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Types.Var.html#Id"><span class="hs-identifier hs-type">Id</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-967"></span><span id="pprLamBndr"><span class="annot"><span class="annottext">pprLamBndr :: Id -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprLamBndr"><span class="hs-identifier hs-var hs-var">pprLamBndr</span></a></span></span><span> </span><span id="local-6989586621680870966"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870966"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BindingSite -&gt; Id -&gt; SDoc
forall a. OutputableBndr a =&gt; BindingSite -&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#pprBndr"><span class="hs-identifier hs-var">pprBndr</span></a></span><span> </span><span class="annot"><span class="annottext">BindingSite
</span><a href="GHC.Utils.Outputable.html#LambdaBind"><span class="hs-identifier hs-var">LambdaBind</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870966"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-968"></span><span>
</span><span id="line-969"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-type">add_parens</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#no_parens"><span class="hs-identifier hs-type">no_parens</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html#SDoc"><span class="hs-identifier hs-type">SDoc</span></a></span><span>
</span><span id="line-970"></span><span id="add_parens"><span class="annot"><span class="annottext">add_parens :: SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var hs-var">add_parens</span></a></span></span><span> </span><span id="local-6989586621680870963"><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870963"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870963"><span class="hs-identifier hs-var">d</span></a></span><span>
</span><span id="line-971"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#add_parens"><span class="hs-identifier hs-var">add_parens</span></a></span><span> </span><span id="local-6989586621680870961"><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870961"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870961"><span class="hs-identifier hs-var">d</span></a></span><span>
</span><span id="line-972"></span><span id="no_parens"><span class="annot"><span class="annottext">no_parens :: SDoc -&gt; Bool -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#no_parens"><span class="hs-identifier hs-var hs-var">no_parens</span></a></span></span><span> </span><span id="local-6989586621680870960"><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870960"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870960"><span class="hs-identifier hs-var">d</span></a></span><span>
</span><span id="line-973"></span><span>
</span><span id="line-974"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870957"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-975"></span><span>  </span><span id="local-6989586621680870954"><span class="annot"><span class="annottext">ppr :: TcEvBinds -&gt; SDoc
</span><a href="#local-6989586621680870954"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#TcEvBinds"><span class="hs-identifier hs-type">TcEvBinds</span></a></span><span> </span><span id="local-6989586621680870953"><span class="annot"><span class="annottext">EvBindsVar
</span><a href="#local-6989586621680870953"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBindsVar -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvBindsVar
</span><a href="#local-6989586621680870953"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-976"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBinds"><span class="hs-identifier hs-type">EvBinds</span></a></span><span> </span><span id="local-6989586621680870952"><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680870952"><span class="hs-identifier hs-var">bs</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;EvBinds&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#braces"><span class="hs-identifier hs-var">braces</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#vcat"><span class="hs-identifier hs-var">vcat</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(EvBind -&gt; SDoc) -&gt; [EvBind] -&gt; [SDoc]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">EvBind -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bag EvBind -&gt; [EvBind]
forall a. Bag a -&gt; [a]
</span><a href="GHC.Data.Bag.html#bagToList"><span class="hs-identifier hs-var">bagToList</span></a></span><span> </span><span class="annot"><span class="annottext">Bag EvBind
</span><a href="#local-6989586621680870952"><span class="hs-identifier hs-var">bs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-977"></span><span>
</span><span id="line-978"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870948"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-979"></span><span>  </span><span id="local-6989586621680870944"><span class="annot"><span class="annottext">ppr :: EvBindsVar -&gt; SDoc
</span><a href="#local-6989586621680870944"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ebv_uniq :: EvBindsVar -&gt; Unique
</span><a href="GHC.Tc.Types.Evidence.html#ebv_uniq"><span class="hs-identifier hs-var">ebv_uniq</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870943"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680870943"><span class="hs-identifier hs-var">u</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-980"></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;EvBindsVar&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#angleBrackets"><span class="hs-identifier hs-var">angleBrackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680870943"><span class="hs-identifier hs-var">u</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-981"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#CoEvBindsVar"><span class="hs-identifier hs-type">CoEvBindsVar</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">ebv_uniq :: EvBindsVar -&gt; Unique
</span><a href="GHC.Tc.Types.Evidence.html#ebv_uniq"><span class="hs-identifier hs-var">ebv_uniq</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870941"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680870941"><span class="hs-identifier hs-var">u</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-982"></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;CoEvBindsVar&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#angleBrackets"><span class="hs-identifier hs-var">angleBrackets</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621680870941"><span class="hs-identifier hs-var">u</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-983"></span><span>
</span><span id="line-984"></span><span class="hs-keyword">instance</span><span> </span><span class="annot"><a href="GHC.Types.Unique.html#Uniquable"><span class="hs-identifier hs-type">Uniquable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBindsVar"><span class="hs-identifier hs-type">EvBindsVar</span></a></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-985"></span><span>  </span><span id="local-6989586621680870937"><span class="annot"><span class="annottext">getUnique :: EvBindsVar -&gt; Unique
</span><a href="GHC.Types.Unique.html#getUnique"><span class="hs-identifier hs-var hs-var hs-var hs-var">getUnique</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvBindsVar -&gt; Unique
</span><a href="GHC.Tc.Types.Evidence.html#ebv_uniq"><span class="hs-identifier hs-var hs-var">ebv_uniq</span></a></span><span>
</span><span id="line-986"></span><span>
</span><span id="line-987"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870933"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-988"></span><span>  </span><span id="local-6989586621680870929"><span class="annot"><span class="annottext">ppr :: EvBind -&gt; SDoc
</span><a href="#local-6989586621680870929"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvBind"><span class="hs-identifier hs-type">EvBind</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">eb_lhs :: EvBind -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#eb_lhs"><span class="hs-identifier hs-var">eb_lhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870928"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870928"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_rhs :: EvBind -&gt; EvTerm
</span><a href="GHC.Tc.Types.Evidence.html#eb_rhs"><span class="hs-identifier hs-var">eb_rhs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870927"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870927"><span class="hs-identifier hs-var">e</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">eb_is_given :: EvBind -&gt; Bool
</span><a href="GHC.Tc.Types.Evidence.html#eb_is_given"><span class="hs-identifier hs-var">eb_is_given</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870926"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680870926"><span class="hs-identifier hs-var">is_given</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-989"></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="#local-6989586621680870925"><span class="hs-identifier hs-var">pp_gw</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870928"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-990"></span><span>           </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Int -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#nest"><span class="hs-identifier hs-var">nest</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; SDoc) -&gt; SDoc -&gt; SDoc
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#equals"><span class="hs-identifier hs-var">equals</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870927"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-991"></span><span>     </span><span class="hs-keyword">where</span><span>
</span><span id="line-992"></span><span>       </span><span id="local-6989586621680870925"><span class="annot"><span class="annottext">pp_gw :: SDoc
</span><a href="#local-6989586621680870925"><span class="hs-identifier hs-var hs-var">pp_gw</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#brackets"><span class="hs-identifier hs-var">brackets</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621680870926"><span class="hs-identifier hs-var">is_given</span></a></span><span> </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">Char -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#char"><span class="hs-identifier hs-var">char</span></a></span><span> </span><span class="annot"><span class="annottext">Char
</span><span class="hs-char">'G'</span></span><span> </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">Char -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#char"><span class="hs-identifier hs-var">char</span></a></span><span> </span><span class="annot"><span class="annottext">Char
</span><span class="hs-char">'W'</span></span><span class="hs-special">)</span><span>
</span><span id="line-993"></span><span>   </span><span class="hs-comment">-- We cheat a bit and pretend EqVars are CoVars for the purposes of pretty printing</span><span>
</span><span id="line-994"></span><span>
</span><span id="line-995"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870920"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTerm"><span class="hs-identifier hs-type">EvTerm</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-996"></span><span>  </span><span id="local-6989586621680870914"><span class="annot"><span class="annottext">ppr :: EvTerm -&gt; SDoc
</span><a href="#local-6989586621680870914"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvExpr"><span class="hs-identifier hs-type">EvExpr</span></a></span><span> </span><span id="local-6989586621680870913"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680870913"><span class="hs-identifier hs-var">e</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680870913"><span class="hs-identifier hs-var">e</span></a></span><span>
</span><span id="line-997"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span><span> </span><span id="local-6989586621680870912"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870912"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span id="local-6989586621680870911"><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680870911"><span class="hs-identifier hs-var">ev</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">EvTypeable -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTypeable
</span><a href="#local-6989586621680870911"><span class="hs-identifier hs-var">ev</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#dcolon"><span class="hs-identifier hs-var">dcolon</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Typeable&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">Mult -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870912"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-998"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvFun"><span class="hs-identifier hs-type">EvFun</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">et_tvs :: EvTerm -&gt; [Id]
</span><a href="GHC.Tc.Types.Evidence.html#et_tvs"><span class="hs-identifier hs-var">et_tvs</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870910"><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680870910"><span class="hs-identifier hs-var">tvs</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">et_given :: EvTerm -&gt; [Id]
</span><a href="GHC.Tc.Types.Evidence.html#et_given"><span class="hs-identifier hs-var">et_given</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870909"><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680870909"><span class="hs-identifier hs-var">gs</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">et_binds :: EvTerm -&gt; TcEvBinds
</span><a href="GHC.Tc.Types.Evidence.html#et_binds"><span class="hs-identifier hs-var">et_binds</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870908"><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680870908"><span class="hs-identifier hs-var">bs</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">et_body :: EvTerm -&gt; Id
</span><a href="GHC.Tc.Types.Evidence.html#et_body"><span class="hs-identifier hs-var">et_body</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="local-6989586621680870907"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870907"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-special">}</span><span class="hs-special">)</span><span>
</span><span id="line-999"></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; Int -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#hang"><span class="hs-identifier hs-var">hang</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;\\&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">[SDoc] -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#sep"><span class="hs-identifier hs-var">sep</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">(Id -&gt; SDoc) -&gt; [Id] -&gt; [SDoc]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; SDoc
</span><a href="GHC.Tc.Types.Evidence.html#pprLamBndr"><span class="hs-identifier hs-var">pprLamBndr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680870910"><span class="hs-identifier hs-var">tvs</span></a></span><span> </span><span class="annot"><span class="annottext">[Id] -&gt; [Id] -&gt; [Id]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">[Id]
</span><a href="#local-6989586621680870909"><span class="hs-identifier hs-var">gs</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc
</span><a href="GHC.Utils.Outputable.html#arrow"><span class="hs-identifier hs-var">arrow</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1000"></span><span>           </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TcEvBinds -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">TcEvBinds
</span><a href="#local-6989586621680870908"><span class="hs-identifier hs-var">bs</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%24%24"><span class="hs-operator hs-var">$$</span></a></span><span> </span><span class="annot"><span class="annottext">Id -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870907"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span>   </span><span class="hs-comment">-- Not very pretty</span><span>
</span><span id="line-1001"></span><span>
</span><span id="line-1002"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870901"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCallStack"><span class="hs-identifier hs-type">EvCallStack</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-1003"></span><span>  </span><span id="local-6989586621680870893"><span class="annot"><span class="annottext">ppr :: EvCallStack -&gt; SDoc
</span><a href="#local-6989586621680870893"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="annot"><span class="annottext">EvCallStack
</span><a href="GHC.Tc.Types.Evidence.html#EvCsEmpty"><span class="hs-identifier hs-var">EvCsEmpty</span></a></span><span>
</span><span id="line-1004"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;[]&quot;</span></span><span>
</span><span id="line-1005"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvCsPushCall"><span class="hs-identifier hs-type">EvCsPushCall</span></a></span><span> </span><span id="local-6989586621680870892"><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680870892"><span class="hs-identifier hs-var">name</span></a></span></span><span> </span><span id="local-6989586621680870891"><span class="annot"><span class="annottext">RealSrcSpan
</span><a href="#local-6989586621680870891"><span class="hs-identifier hs-var">loc</span></a></span></span><span> </span><span id="local-6989586621680870890"><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680870890"><span class="hs-identifier hs-var">tm</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-1006"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Name, RealSrcSpan) -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Name
</span><a href="#local-6989586621680870892"><span class="hs-identifier hs-var">name</span></a></span><span class="hs-special">,</span><span class="annot"><span class="annottext">RealSrcSpan
</span><a href="#local-6989586621680870891"><span class="hs-identifier hs-var">loc</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;:&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvExpr
</span><a href="#local-6989586621680870890"><span class="hs-identifier hs-var">tm</span></a></span><span>
</span><span id="line-1007"></span><span>
</span><span id="line-1008"></span><span class="hs-keyword">instance</span><span> </span><span id="local-6989586621680870887"><span class="annot"><a href="GHC.Utils.Outputable.html#Outputable"><span class="hs-identifier hs-type">Outputable</span></a></span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeable"><span class="hs-identifier hs-type">EvTypeable</span></a></span></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-1009"></span><span>  </span><span id="local-6989586621680870879"><span class="annot"><span class="annottext">ppr :: EvTypeable -&gt; SDoc
</span><a href="#local-6989586621680870879"><span class="hs-identifier hs-var hs-var hs-var hs-var">ppr</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyCon"><span class="hs-identifier hs-type">EvTypeableTyCon</span></a></span><span> </span><span id="local-6989586621680870878"><span class="annot"><span class="annottext">TyCon
</span><a href="#local-6989586621680870878"><span class="hs-identifier hs-var">ts</span></a></span></span><span> </span><span class="annot"><span class="annottext">[EvTerm]
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;TyCon&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">TyCon -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">TyCon
</span><a href="#local-6989586621680870878"><span class="hs-identifier hs-var">ts</span></a></span><span>
</span><span id="line-1010"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyApp"><span class="hs-identifier hs-type">EvTypeableTyApp</span></a></span><span> </span><span id="local-6989586621680870877"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870877"><span class="hs-identifier hs-var">t1</span></a></span></span><span> </span><span id="local-6989586621680870876"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870876"><span class="hs-identifier hs-var">t2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870877"><span class="hs-identifier hs-var">t1</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870876"><span class="hs-identifier hs-var">t2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1011"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTrFun"><span class="hs-identifier hs-type">EvTypeableTrFun</span></a></span><span> </span><span id="local-6989586621680870875"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870875"><span class="hs-identifier hs-var">tm</span></a></span></span><span> </span><span id="local-6989586621680870874"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870874"><span class="hs-identifier hs-var">t1</span></a></span></span><span> </span><span id="local-6989586621680870873"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870873"><span class="hs-identifier hs-var">t2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#parens"><span class="hs-identifier hs-var">parens</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870874"><span class="hs-identifier hs-var">t1</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#mulArrow"><span class="hs-identifier hs-var">mulArrow</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870875"><span class="hs-identifier hs-var">tm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870873"><span class="hs-identifier hs-var">t2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1012"></span><span>  </span><span class="annot"><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#EvTypeableTyLit"><span class="hs-identifier hs-type">EvTypeableTyLit</span></a></span><span> </span><span id="local-6989586621680870871"><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870871"><span class="hs-identifier hs-var">t1</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;TyLit&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%3E"><span class="hs-operator hs-var">&lt;&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">EvTerm
</span><a href="#local-6989586621680870871"><span class="hs-identifier hs-var">t1</span></a></span><span>
</span><span id="line-1013"></span><span>
</span><span id="line-1014"></span><span>
</span><span id="line-1015"></span><span class="hs-comment">----------------------------------------------------------------------</span><span>
</span><span id="line-1016"></span><span class="hs-comment">-- Helper functions for dealing with IP newtype-dictionaries</span><span>
</span><span id="line-1017"></span><span class="hs-comment">----------------------------------------------------------------------</span><span>
</span><span id="line-1018"></span><span>
</span><span id="line-1019"></span><span class="hs-comment">-- | Create a 'Coercion' that unwraps an implicit-parameter or</span><span>
</span><span id="line-1020"></span><span class="hs-comment">-- overloaded-label dictionary to expose the underlying value. We</span><span>
</span><span id="line-1021"></span><span class="hs-comment">-- expect the 'Type' to have the form `IP sym ty` or `IsLabel sym ty`,</span><span>
</span><span id="line-1022"></span><span class="hs-comment">-- and return a 'Coercion' `co :: IP sym ty ~ ty` or</span><span>
</span><span id="line-1023"></span><span class="hs-comment">-- `co :: IsLabel sym ty ~ Proxy# sym -&gt; ty`.  See also</span><span>
</span><span id="line-1024"></span><span class="hs-comment">-- Note [Type-checking overloaded labels] in &quot;GHC.Tc.Gen.Expr&quot;.</span><span>
</span><span id="line-1025"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#unwrapIP"><span class="hs-identifier hs-type">unwrapIP</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionR"><span class="hs-identifier hs-type">CoercionR</span></a></span><span>
</span><span id="line-1026"></span><span id="unwrapIP"><span class="annot"><span class="annottext">unwrapIP :: Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#unwrapIP"><span class="hs-identifier hs-var hs-var">unwrapIP</span></a></span></span><span> </span><span id="local-6989586621680870870"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870870"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-1027"></span><span>  </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">TyCon -&gt; Maybe ([Id], Mult, CoAxiom Unbranched)
</span><a href="GHC.Core.TyCon.html#unwrapNewTyCon_maybe"><span class="hs-identifier hs-var">unwrapNewTyCon_maybe</span></a></span><span> </span><span class="annot"><span class="annottext">TyCon
</span><a href="#local-6989586621680870868"><span class="hs-identifier hs-var">tc</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-1028"></span><span>    </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-type">Just</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[Id]
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span class="annot"><span class="annottext">Mult
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span id="local-6989586621680870867"><span class="annot"><span class="annottext">CoAxiom Unbranched
</span><a href="#local-6989586621680870867"><span class="hs-identifier hs-var">ax</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Role
-&gt; CoAxiom Unbranched -&gt; [Mult] -&gt; [TcCoercionR] -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkUnbranchedAxInstCo"><span class="hs-identifier hs-var">mkUnbranchedAxInstCo</span></a></span><span> </span><span class="annot"><span class="annottext">Role
</span><a href="GHC.Core.Coercion.Axiom.html#Representational"><span class="hs-identifier hs-var">Representational</span></a></span><span> </span><span class="annot"><span class="annottext">CoAxiom Unbranched
</span><a href="#local-6989586621680870867"><span class="hs-identifier hs-var">ax</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680870866"><span class="hs-identifier hs-var">tys</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-1029"></span><span>    </span><span class="annot"><span class="annottext">Maybe ([Id], Mult, CoAxiom Unbranched)
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; TcCoercionR
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;unwrapIP&quot;</span></span><span> </span><span class="annot"><span class="annottext">(SDoc -&gt; TcCoercionR) -&gt; SDoc -&gt; TcCoercionR
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-1030"></span><span>                       </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;The dictionary for&quot;</span></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#quotes"><span class="hs-identifier hs-var">quotes</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">TyCon -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">TyCon
</span><a href="#local-6989586621680870868"><span class="hs-identifier hs-var">tc</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1031"></span><span>                         </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#text"><span class="hs-identifier hs-var">text</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;is not a newtype!&quot;</span></span><span>
</span><span id="line-1032"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-1033"></span><span>  </span><span class="hs-special">(</span><span id="local-6989586621680870868"><span class="annot"><span class="annottext">TyCon
</span><a href="#local-6989586621680870868"><span class="hs-identifier hs-var">tc</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621680870866"><span class="annot"><span class="annottext">[Mult]
</span><a href="#local-6989586621680870866"><span class="hs-identifier hs-var">tys</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult -&gt; (TyCon, [Mult])
</span><a href="GHC.Core.Type.html#splitTyConApp"><span class="hs-identifier hs-var">splitTyConApp</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870870"><span class="hs-identifier hs-var">ty</span></a></span><span>
</span><span id="line-1034"></span><span>
</span><span id="line-1035"></span><span class="hs-comment">-- | Create a 'Coercion' that wraps a value in an implicit-parameter</span><span>
</span><span id="line-1036"></span><span class="hs-comment">-- dictionary. See 'unwrapIP'.</span><span>
</span><span id="line-1037"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#wrapIP"><span class="hs-identifier hs-type">wrapIP</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#CoercionR"><span class="hs-identifier hs-type">CoercionR</span></a></span><span>
</span><span id="line-1038"></span><span id="wrapIP"><span class="annot"><span class="annottext">wrapIP :: Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#wrapIP"><span class="hs-identifier hs-var hs-var">wrapIP</span></a></span></span><span> </span><span id="local-6989586621680870863"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870863"><span class="hs-identifier hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">TcCoercionR -&gt; TcCoercionR
</span><a href="GHC.Core.Coercion.html#mkSymCo"><span class="hs-identifier hs-var">mkSymCo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Mult -&gt; TcCoercionR
</span><a href="GHC.Tc.Types.Evidence.html#unwrapIP"><span class="hs-identifier hs-var">unwrapIP</span></a></span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870863"><span class="hs-identifier hs-var">ty</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-1039"></span><span>
</span><span id="line-1040"></span><span class="hs-comment">----------------------------------------------------------------------</span><span>
</span><span id="line-1041"></span><span class="hs-comment">-- A datatype used to pass information when desugaring quotations</span><span>
</span><span id="line-1042"></span><span class="hs-comment">----------------------------------------------------------------------</span><span>
</span><span id="line-1043"></span><span>
</span><span id="line-1044"></span><span class="hs-comment">-- We have to pass a `EvVar` and `Type` into `dsBracket` so that the</span><span>
</span><span id="line-1045"></span><span class="hs-comment">-- correct evidence and types are applied to all the TH combinators.</span><span>
</span><span id="line-1046"></span><span class="hs-comment">-- This data type bundles them up together with some convenience methods.</span><span>
</span><span id="line-1047"></span><span class="hs-comment">--</span><span>
</span><span id="line-1048"></span><span class="hs-comment">-- The EvVar is evidence for `Quote m`</span><span>
</span><span id="line-1049"></span><span class="hs-comment">-- The Type is a metavariable for `m`</span><span>
</span><span id="line-1050"></span><span class="hs-comment">--</span><span>
</span><span id="line-1051"></span><span class="hs-keyword">data</span><span> </span><span id="QuoteWrapper"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-var">QuoteWrapper</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="QuoteWrapper"><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-var">QuoteWrapper</span></a></span></span><span> </span><span class="annot"><a href="GHC.Types.Var.html#EvVar"><span class="hs-identifier hs-type">EvVar</span></a></span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span> </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621680870828"><span id="local-6989586621680870830"><span id="local-6989586621680870832"><span id="local-6989586621680870834"><span id="local-6989586621680870836"><span id="local-6989586621680870838"><span id="local-6989586621680870840"><span id="local-6989586621680870842"><span id="local-6989586621680870844"><span id="local-6989586621680870846"><span id="local-6989586621680870848"><span id="local-6989586621680870850"><span id="local-6989586621680870854"><span id="local-6989586621680870858"><span class="annot"><span class="annottext">Typeable QuoteWrapper
Typeable QuoteWrapper
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; QuoteWrapper -&gt; c QuoteWrapper)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c QuoteWrapper)
-&gt; (QuoteWrapper -&gt; Constr)
-&gt; (QuoteWrapper -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c QuoteWrapper))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e))
    -&gt; Maybe (c QuoteWrapper))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; QuoteWrapper -&gt; QuoteWrapper)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r)
    -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; [u])
-&gt; (forall u.
    Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper)
-&gt; Data QuoteWrapper
QuoteWrapper -&gt; DataType
QuoteWrapper -&gt; Constr
(forall b. Data b =&gt; b -&gt; b) -&gt; QuoteWrapper -&gt; QuoteWrapper
forall a.
Typeable a
-&gt; (forall (c :: * -&gt; *).
    (forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
    -&gt; (forall g. g -&gt; c g) -&gt; a -&gt; c a)
-&gt; (forall (c :: * -&gt; *).
    (forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
    -&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c a)
-&gt; (a -&gt; Constr)
-&gt; (a -&gt; DataType)
-&gt; (forall (t :: * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d. Data d =&gt; c (t d)) -&gt; Maybe (c a))
-&gt; (forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
    Typeable t =&gt;
    (forall d e. (Data d, Data e) =&gt; c (t d e)) -&gt; Maybe (c a))
-&gt; ((forall b. Data b =&gt; b -&gt; b) -&gt; a -&gt; a)
-&gt; (forall r r'.
    (r -&gt; r' -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall r r'.
    (r' -&gt; r -&gt; r) -&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; a -&gt; r)
-&gt; (forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; [u])
-&gt; (forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; a -&gt; u)
-&gt; (forall (m :: * -&gt; *).
    Monad m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; (forall (m :: * -&gt; *).
    MonadPlus m =&gt;
    (forall d. Data d =&gt; d -&gt; m d) -&gt; a -&gt; m a)
-&gt; Data a
forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; u
forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; [u]
forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c QuoteWrapper
forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; QuoteWrapper -&gt; c QuoteWrapper
forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c QuoteWrapper)
forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c QuoteWrapper)
gmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
$cgmapMo :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
gmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
$cgmapMp :: forall (m :: * -&gt; *).
MonadPlus m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
gmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
$cgmapM :: forall (m :: * -&gt; *).
Monad m =&gt;
(forall d. Data d =&gt; d -&gt; m d) -&gt; QuoteWrapper -&gt; m QuoteWrapper
gmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; u
$cgmapQi :: forall u. Int -&gt; (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; u
gmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; [u]
$cgmapQ :: forall u. (forall d. Data d =&gt; d -&gt; u) -&gt; QuoteWrapper -&gt; [u]
gmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
$cgmapQr :: forall r r'.
(r' -&gt; r -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
gmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
$cgmapQl :: forall r r'.
(r -&gt; r' -&gt; r)
-&gt; r -&gt; (forall d. Data d =&gt; d -&gt; r') -&gt; QuoteWrapper -&gt; r
gmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; QuoteWrapper -&gt; QuoteWrapper
$cgmapT :: (forall b. Data b =&gt; b -&gt; b) -&gt; QuoteWrapper -&gt; QuoteWrapper
dataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c QuoteWrapper)
$cdataCast2 :: forall (t :: * -&gt; * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d e. (Data d, Data e) =&gt; c (t d e))
-&gt; Maybe (c QuoteWrapper)
dataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c QuoteWrapper)
$cdataCast1 :: forall (t :: * -&gt; *) (c :: * -&gt; *).
Typeable t =&gt;
(forall d. Data d =&gt; c (t d)) -&gt; Maybe (c QuoteWrapper)
dataTypeOf :: QuoteWrapper -&gt; DataType
$cdataTypeOf :: QuoteWrapper -&gt; DataType
toConstr :: QuoteWrapper -&gt; Constr
$ctoConstr :: QuoteWrapper -&gt; Constr
gunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c QuoteWrapper
$cgunfold :: forall (c :: * -&gt; *).
(forall b r. Data b =&gt; c (b -&gt; r) -&gt; c r)
-&gt; (forall r. r -&gt; c r) -&gt; Constr -&gt; c QuoteWrapper
gfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; QuoteWrapper -&gt; c QuoteWrapper
$cgfoldl :: forall (c :: * -&gt; *).
(forall d b. Data d =&gt; c (d -&gt; b) -&gt; d -&gt; c b)
-&gt; (forall g. g -&gt; c g) -&gt; QuoteWrapper -&gt; c QuoteWrapper
</span><a href="../../base/src/Data.Data.html#Data"><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var hs-var">Data.Data</span></a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span>
</span><span id="line-1052"></span><span>
</span><span id="line-1053"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#quoteWrapperTyVarTy"><span class="hs-identifier hs-type">quoteWrapperTyVarTy</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-type">QuoteWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Core.TyCo.Rep.html#Type"><span class="hs-identifier hs-type">Type</span></a></span><span>
</span><span id="line-1054"></span><span id="quoteWrapperTyVarTy"><span class="annot"><span class="annottext">quoteWrapperTyVarTy :: QuoteWrapper -&gt; Mult
</span><a href="GHC.Tc.Types.Evidence.html#quoteWrapperTyVarTy"><span class="hs-identifier hs-var hs-var">quoteWrapperTyVarTy</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-type">QuoteWrapper</span></a></span><span> </span><span class="annot"><span class="annottext">Id
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621680870827"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870827"><span class="hs-identifier hs-var">t</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870827"><span class="hs-identifier hs-var">t</span></a></span><span>
</span><span id="line-1055"></span><span>
</span><span id="line-1056"></span><span class="hs-comment">-- | Convert the QuoteWrapper into a normal HsWrapper which can be used to</span><span>
</span><span id="line-1057"></span><span class="hs-comment">-- apply its contents.</span><span>
</span><span id="line-1058"></span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#applyQuoteWrapper"><span class="hs-identifier hs-type">applyQuoteWrapper</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-type">QuoteWrapper</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#HsWrapper"><span class="hs-identifier hs-type">HsWrapper</span></a></span><span>
</span><span id="line-1059"></span><span id="applyQuoteWrapper"><span class="annot"><span class="annottext">applyQuoteWrapper :: QuoteWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#applyQuoteWrapper"><span class="hs-identifier hs-var hs-var">applyQuoteWrapper</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Tc.Types.Evidence.html#QuoteWrapper"><span class="hs-identifier hs-type">QuoteWrapper</span></a></span><span> </span><span id="local-6989586621680870826"><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870826"><span class="hs-identifier hs-var">ev_var</span></a></span></span><span> </span><span id="local-6989586621680870825"><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870825"><span class="hs-identifier hs-var">m_var</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-1060"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Id] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpEvVarApps"><span class="hs-identifier hs-var">mkWpEvVarApps</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Id
</span><a href="#local-6989586621680870826"><span class="hs-identifier hs-var">ev_var</span></a></span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">HsWrapper -&gt; HsWrapper -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#%3C.%3E"><span class="hs-operator hs-var">&lt;.&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">[Mult] -&gt; HsWrapper
</span><a href="GHC.Tc.Types.Evidence.html#mkWpTyApps"><span class="hs-identifier hs-var">mkWpTyApps</span></a></span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">Mult
</span><a href="#local-6989586621680870825"><span class="hs-identifier hs-var">m_var</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-1061"></span></pre></body></html>